Skip to content

Commit debadbc

Browse files
committed
Handle disable & none for secure copy/paste
resolves: QubesOS/qubes-issues#9564
1 parent 89d0254 commit debadbc

File tree

1 file changed

+15
-5
lines changed

1 file changed

+15
-5
lines changed

gui-daemon/xside.c

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4357,7 +4357,7 @@ static void load_default_config_values(Ghandles * g)
43574357
}
43584358

43594359
// parse string describing key sequence like Ctrl-Alt-c
4360-
static void parse_key_sequence(const char *seq, int *mask, KeySym * key)
4360+
static void parse_key_sequence(const char *seq, int *mask, KeySym * key, char *vmname)
43614361
{
43624362
const char *seqp = seq;
43634363
char *name;
@@ -4381,6 +4381,15 @@ static void parse_key_sequence(const char *seq, int *mask, KeySym * key)
43814381
if (seq == NULL)
43824382
return;
43834383

4384+
// Option to disable hotkeys. Good for dom0 with dedicated GUIVMs or untrusted VMs
4385+
if ((strcasecmp(seq, "disable") == 0) || (strcasecmp(seq, "none") == 0)) {
4386+
*key = NoSymbol;
4387+
fprintf(stderr,
4388+
"Warning: Disabling copy or paste hotkeys for %s\n",
4389+
vmname);
4390+
return;
4391+
}
4392+
43844393
*mask = 0;
43854394
do {
43864395
found_modifier = 0;
@@ -4397,8 +4406,9 @@ static void parse_key_sequence(const char *seq, int *mask, KeySym * key)
43974406
*key = XStringToKeysym(seqp);
43984407
if (*key == NoSymbol) {
43994408
fprintf(stderr,
4400-
"Warning: key sequence (%s) is invalid (will be disabled)\n",
4401-
seq);
4409+
"Error: key sequence (%s) set for %s is invalid\n",
4410+
seq, vmname);
4411+
exit(1);
44024412
}
44034413
}
44044414

@@ -4409,12 +4419,12 @@ static void parse_vm_config(Ghandles * g, config_setting_t * group)
44094419
if ((setting =
44104420
config_setting_get_member(group, "secure_copy_sequence"))) {
44114421
parse_key_sequence(config_setting_get_string(setting),
4412-
&g->copy_seq_mask, &g->copy_seq_key);
4422+
&g->copy_seq_mask, &g->copy_seq_key, (char *)&g->vmname);
44134423
}
44144424
if ((setting =
44154425
config_setting_get_member(group, "secure_paste_sequence"))) {
44164426
parse_key_sequence(config_setting_get_string(setting),
4417-
&g->paste_seq_mask, &g->paste_seq_key);
4427+
&g->paste_seq_mask, &g->paste_seq_key, (char *)&g->vmname);
44184428
}
44194429

44204430
if ((setting =

0 commit comments

Comments
 (0)