mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-01-22 22:03:43 +03:00
add substitution in MODE= field
Do substitition processing in MODE field, similar to substitution in OWNER, GROUP etc fields. Add test case for normal and overflow behaviour. Document in manpage.
This commit is contained in:
parent
4e548559ba
commit
ff94cec3d7
@ -1617,6 +1617,27 @@ EOF
|
||||
KERNEL=="sda", MODE="0000"
|
||||
EOF
|
||||
},
|
||||
{
|
||||
desc => "TEST PROGRAM feeds MODE",
|
||||
subsys => "block",
|
||||
devpath => "/block/sda",
|
||||
exp_name => "sda",
|
||||
exp_perms => "0:0:0400",
|
||||
rules => <<EOF
|
||||
KERNEL=="sda", PROGRAM=="/bin/echo 0 0 0400", OWNER="%c{1}", GROUP="%c{2}", MODE="%c{3}"
|
||||
EOF
|
||||
},
|
||||
{
|
||||
desc => "TEST PROGRAM feeds MODE with overflow",
|
||||
subsys => "block",
|
||||
devpath => "/block/sda",
|
||||
exp_name => "sda",
|
||||
exp_perms => "0:0:0400",
|
||||
rules => <<EOF
|
||||
KERNEL=="sda", PROGRAM=="/bin/echo 0 0 0400letsdoabuffferoverflow0123456789012345789012345678901234567890", OWNER="%c{1}", GROUP="%c{2}", MODE="%c{3}"
|
||||
EOF
|
||||
},
|
||||
|
||||
);
|
||||
|
||||
# set env
|
||||
@ -1732,6 +1753,15 @@ sub symlink_test {
|
||||
}
|
||||
}
|
||||
|
||||
sub make_udev_root {
|
||||
system("rm -rf $udev_root");
|
||||
mkdir($udev_root) || die "unable to create udev_root: $udev_root\n";
|
||||
# setting group and mode of udev_root ensures the tests work
|
||||
# even if the parent directory has setgid bit enabled.
|
||||
chown (0, 0, $udev_root) || die "unable to chown $udev_root\n";
|
||||
chmod (0755, $udev_root) || die "unable to chmod $udev_root\n";
|
||||
}
|
||||
|
||||
sub run_test {
|
||||
my ($rules, $number) = @_;
|
||||
|
||||
@ -1804,8 +1834,7 @@ sub run_test {
|
||||
print "\n";
|
||||
|
||||
if (defined($rules->{option}) && $rules->{option} eq "clean") {
|
||||
system("rm -rf $udev_root");
|
||||
mkdir($udev_root) || die "unable to create udev_root: $udev_root\n";
|
||||
make_udev_root ();
|
||||
}
|
||||
|
||||
}
|
||||
@ -1818,8 +1847,7 @@ if (!($<==0)) {
|
||||
}
|
||||
|
||||
# prepare
|
||||
system("rm -rf $udev_root");
|
||||
mkdir($udev_root) || die "unable to create udev_root: $udev_root\n";
|
||||
make_udev_root ();
|
||||
|
||||
# create config file
|
||||
open CONF, ">$udev_conf" || die "unable to create config file: $udev_conf";
|
||||
|
3
udev.7
3
udev.7
@ -307,7 +307,8 @@ The
|
||||
\fBSYMLINK\fR,
|
||||
\fBPROGRAM\fR,
|
||||
\fBOWNER\fR,
|
||||
\fBGROUP\fR
|
||||
\fBGROUP\fR,
|
||||
\fBMODE\fR
|
||||
and
|
||||
\fBRUN\fR
|
||||
fields support simple printf\-like string substitutions\. The
|
||||
|
2
udev.xml
2
udev.xml
@ -462,7 +462,7 @@
|
||||
</variablelist>
|
||||
|
||||
<para>The <option>NAME</option>, <option>SYMLINK</option>, <option>PROGRAM</option>,
|
||||
<option>OWNER</option>, <option>GROUP</option> and <option>RUN</option>
|
||||
<option>OWNER</option>, <option>GROUP</option>, <option>MODE</option> and <option>RUN</option>
|
||||
fields support simple printf-like string substitutions. The <option>RUN</option>
|
||||
format chars gets applied after all rules have been processed, right before the program
|
||||
is executed. It allows the use of the complete environment set by earlier matching
|
||||
|
@ -1412,7 +1412,10 @@ int udev_rules_get_name(struct udev_rules *rules, struct udevice *udev)
|
||||
if (!udev->mode_final && rule->mode.operation != KEY_OP_UNSET) {
|
||||
if (rule->mode.operation == KEY_OP_ASSIGN_FINAL)
|
||||
udev->mode_final = 1;
|
||||
udev->mode = strtol(key_val(rule, &rule->mode), NULL, 8);
|
||||
char buf[20];
|
||||
strlcpy(buf, key_val(rule, &rule->mode), sizeof(buf));
|
||||
udev_rules_apply_format(udev, buf, sizeof(buf));
|
||||
udev->mode = strtol(buf, NULL, 8);
|
||||
dbg("applied mode=%#o to '%s'\n", udev->mode, udev->dev->kernel);
|
||||
}
|
||||
if (!udev->owner_final && rule->owner.operation != KEY_OP_UNSET) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user