Merge branch 'master' of github.com:eudev-project/eudev

This commit is contained in:
Boian Bonev 2021-10-10 04:20:03 +03:00
commit c1967b3406
No known key found for this signature in database
GPG Key ID: 1365720913D2F22D
3 changed files with 47 additions and 9 deletions

View File

@ -682,10 +682,12 @@ int udev_build_argv(struct udev *udev, char *cmd, int *argc, char *argv[]) {
pos = cmd;
while (pos != NULL && pos[0] != '\0') {
if (pos[0] == '\'') {
/* do not separate quotes */
if (IN_SET(pos[0], '\'', '"')) {
/* do not separate quotes or double quotes */
char delim[2] = { pos[0], '\0' };
pos++;
argv[i] = strsep(&pos, "\'");
argv[i] = strsep(&pos, delim);
if (pos != NULL)
while (pos[0] == ' ')
pos++;

View File

@ -760,6 +760,7 @@ static int attr_subst_subdir(char *attr, size_t len) {
static int get_key(struct udev *udev, char **line, char **key, enum operation_type *op, char **value) {
char *linepos;
char *temp;
unsigned i, j;
linepos = *line;
if (linepos == NULL || linepos[0] == '\0')
@ -835,14 +836,25 @@ static int get_key(struct udev *udev, char **line, char **key, enum operation_ty
*value = linepos;
/* terminate */
temp = strchr(linepos, '"');
if (!temp)
return -1;
temp[0] = '\0';
temp++;
for (i = 0, j = 0; ; i++, j++) {
if (linepos[i] == '"')
break;
if (linepos[i] == '\0')
return -1;
/* double quotes can be escaped */
if (linepos[i] == '\\')
if (linepos[i+1] == '"')
i++;
linepos[j] = linepos[i];
}
linepos[j] = '\0';
/* move line to next key */
*line = temp;
*line = linepos + i + 1;
return 0;
}

View File

@ -318,6 +318,30 @@ EOF
exp_name => "foo7" ,
rules => <<EOF
SUBSYSTEMS=="scsi", PROGRAM=="/bin/echo -n 'foo3 foo4' 'foo5 foo6 foo7 foo8'", KERNEL=="sda5", SYMLINK+="%c{5}"
EOF
},
{
desc => "program arguments combined with escaped double quotes, part 1",
devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5",
exp_name => "foo2" ,
rules => <<EOF
SUBSYSTEMS=="scsi", PROGRAM=="/bin/sh -c 'printf %%s \\\"foo1 foo2\\\" | grep \\\"foo1 foo2\\\"'", KERNEL=="sda5", SYMLINK+="%c{2}"
EOF
},
{
desc => "program arguments combined with escaped double quotes, part 2",
devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5",
exp_name => "foo2" ,
rules => <<EOF
SUBSYSTEMS=="scsi", PROGRAM=="/bin/sh -c \\\"printf %%s 'foo1 foo2' | grep 'foo1 foo2'\\\"", KERNEL=="sda5", SYMLINK+="%c{2}"
EOF
},
{
desc => "program arguments combined with escaped double quotes, part 3",
devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda5",
exp_name => "foo2" ,
rules => <<EOF
SUBSYSTEMS=="scsi", PROGRAM=="/bin/sh -c 'printf \\\"%%s %%s\\\" \\\"foo1 foo2\\\" \\\"foo3\\\"| grep \\\"foo1 foo2\\\"'", KERNEL=="sda5", SYMLINK+="%c{2}"
EOF
},
{