[PATCH libinput] tools: hide key codes by default

Hans de Goede hdegoede at redhat.com
Mon Feb 13 07:48:34 UTC 2017


Hi,

On 13-02-17 02:18, Peter Hutterer wrote:
> libinput-debug-events prints keycodes as they come in. This makes it dangerous
> to be run by users (especially in the background) because it will leak
> sensitive information as it is typed. Obfuscate the base set of keycodes
> by default, require a --show-keycodes switch to show it.
>
> The few times we actually need the keycodes, we can run the switch in the
> debugging tool.
>
> This does not affect keys outside of the main block on the keyboard (F-keys,
> multimedia keys).
>
> Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

Patch looks good to me:

Reviewed-by: Hans de Goede <hdegoede at redhat.com>

Regards,

Hans

> ---
>  tools/event-debug.c | 19 +++++++++++++++----
>  tools/shared.c      |  7 +++++++
>  tools/shared.h      |  3 +++
>  3 files changed, 25 insertions(+), 4 deletions(-)
>
> diff --git a/tools/event-debug.c b/tools/event-debug.c
> index 779b54a..9022e39 100644
> --- a/tools/event-debug.c
> +++ b/tools/event-debug.c
> @@ -267,20 +267,31 @@ print_device_notify(struct libinput_event *ev)
>  }
>
>  static void
> -print_key_event(struct libinput_event *ev)
> +print_key_event(struct libinput *li, struct libinput_event *ev)
>  {
>  	struct libinput_event_keyboard *k = libinput_event_get_keyboard_event(ev);
> +	struct tools_context *context;
> +	struct tools_options *options;
>  	enum libinput_key_state state;
>  	uint32_t key;
>  	const char *keyname;
>
> +	context = libinput_get_user_data(li);
> +	options = &context->options;
> +
>  	print_event_time(libinput_event_keyboard_get_time(k));
>  	state = libinput_event_keyboard_get_key_state(k);
>
>  	key = libinput_event_keyboard_get_key(k);
> -	keyname = libevdev_event_code_get_name(EV_KEY, key);
> +	if (!options->show_keycodes &&
> +	    (key >= KEY_ESC && key < KEY_ZENKAKUHANKAKU)) {
> +		keyname = "***";
> +	} else {
> +		keyname = libevdev_event_code_get_name(EV_KEY, key);
> +		keyname = keyname ? keyname : "???";
> +	}
>  	printf("%s (%d) %s\n",
> -	       keyname ? keyname : "???",
> +	       keyname,
>  	       key,
>  	       state == LIBINPUT_KEY_STATE_PRESSED ? "pressed" : "released");
>  }
> @@ -754,7 +765,7 @@ handle_and_print_events(struct libinput *li)
>  						  &context.options);
>  			break;
>  		case LIBINPUT_EVENT_KEYBOARD_KEY:
> -			print_key_event(ev);
> +			print_key_event(li, ev);
>  			break;
>  		case LIBINPUT_EVENT_POINTER_MOTION:
>  			print_motion_event(ev);
> diff --git a/tools/shared.c b/tools/shared.c
> index 05fb118..1019184 100644
> --- a/tools/shared.c
> +++ b/tools/shared.c
> @@ -62,6 +62,7 @@ enum options {
>  	OPT_SCROLL_BUTTON,
>  	OPT_SPEED,
>  	OPT_PROFILE,
> +	OPT_SHOW_KEYCODES,
>  };
>
>  LIBINPUT_ATTRIBUTE_PRINTF(3, 0)
> @@ -103,6 +104,7 @@ tools_usage(void)
>  	       "--set-profile=[adaptive|flat].... set pointer acceleration profile\n"
>  	       "--set-speed=<value>.... set pointer acceleration speed (allowed range [-1, 1]) \n"
>  	       "--set-tap-map=[lrm|lmr] ... set button mapping for tapping\n"
> +	       "--show-keycodes.... show all key codes while typing\n"
>  	       "\n"
>  	       "These options apply to all applicable devices, if a feature\n"
>  	       "is not explicitly specified it is left at each device's default.\n"
> @@ -137,6 +139,7 @@ tools_init_context(struct tools_context *context)
>  	options->seat = "seat0";
>  	options->speed = 0.0;
>  	options->profile = LIBINPUT_CONFIG_ACCEL_PROFILE_NONE;
> +	options->show_keycodes = false;
>  }
>
>  int
> @@ -173,6 +176,7 @@ tools_parse_args(int argc, char **argv, struct tools_context *context)
>  			{ "set-profile", 1, 0, OPT_PROFILE },
>  			{ "set-tap-map", 1, 0, OPT_TAP_MAP },
>  			{ "set-speed", 1, 0, OPT_SPEED },
> +			{ "show-keycodes", 0, 0, OPT_SHOW_KEYCODES },
>  			{ 0, 0, 0, 0}
>  		};
>
> @@ -337,6 +341,9 @@ tools_parse_args(int argc, char **argv, struct tools_context *context)
>  				return 1;
>  			}
>  			break;
> +		case OPT_SHOW_KEYCODES:
> +			options->show_keycodes = true;
> +			break;
>  		default:
>  			tools_usage();
>  			return 1;
> diff --git a/tools/shared.h b/tools/shared.h
> index 17fdf37..9b1a988 100644
> --- a/tools/shared.h
> +++ b/tools/shared.h
> @@ -24,6 +24,8 @@
>  #ifndef _SHARED_H_
>  #define _SHARED_H_
>
> +#include <stdbool.h>
> +
>  #include <libinput.h>
>
>  enum tools_backend {
> @@ -36,6 +38,7 @@ struct tools_options {
>  	const char *device; /* if backend is BACKEND_DEVICE */
>  	const char *seat; /* if backend is BACKEND_UDEV */
>  	int grab; /* EVIOCGRAB */
> +	bool show_keycodes; /* show keycodes */
>
>  	int verbose;
>  	int tapping;
>


More information about the wayland-devel mailing list