[PATCH] complete removal of explicit udev permissions config file

This commit is contained in:
kay.sievers@vrfy.org 2004-12-18 11:34:17 +01:00 committed by Greg KH
parent 3ac0326962
commit 8b36cc0f17
17 changed files with 39 additions and 494 deletions

4
FAQ
View file

@ -72,10 +72,6 @@ A: udev is entirely in userspace. If the kernel supports a greater number
Q: Will udev support symlinks?
A: Yes, It now does. Multiple symlinks per device node too.
Q: How will udev support changes to device permissions?
A: On shutdown, udev will save the state of existing device permissions to
its database, and then used the on the next boot time.
Q: How will udev handle the /dev filesystem?
A: /dev can be a ramfs, or a backing filesystem. udev does not care what
kind of filesystem it runs on.

View file

@ -284,7 +284,6 @@ udev_version.h:
@echo \#define UDEV_CONFIG_DIR \"$(configdir)\" >> $@
@echo \#define UDEV_CONFIG_FILE \"$(configdir)/udev.conf\" >> $@
@echo \#define UDEV_RULES_FILE \"$(configdir)/rules.d\" >> $@
@echo \#define UDEV_PERMISSION_FILE \"$(configdir)/permissions.d\" >> $@
@echo \#define UDEV_LOG_DEFAULT \"yes\" >> $@
@echo \#define UDEV_BIN \"$(DESTDIR)$(sbindir)/udev\" >> $@
@echo \#define UDEVD_BIN \"$(DESTDIR)$(sbindir)/udevd\" >> $@
@ -381,7 +380,6 @@ small_release: $(DISTFILES) spotless
install-config:
$(INSTALL) -d $(DESTDIR)$(configdir)/rules.d
$(INSTALL) -d $(DESTDIR)$(configdir)/permissions.d
@if [ ! -r $(DESTDIR)$(configdir)/udev.conf ]; then \
echo $(INSTALL_DATA) $(LOCAL_CFG_DIR)/udev.conf $(DESTDIR)$(configdir); \
$(INSTALL_DATA) $(LOCAL_CFG_DIR)/udev.conf $(DESTDIR)$(configdir); \
@ -390,10 +388,6 @@ install-config:
echo $(INSTALL_DATA) $(LOCAL_CFG_DIR)/udev.rules $(DESTDIR)$(configdir)/rules.d/50-udev.rules; \
$(INSTALL_DATA) $(LOCAL_CFG_DIR)/udev.rules $(DESTDIR)$(configdir)/rules.d/50-udev.rules; \
fi
@if [ ! -r $(DESTDIR)$(configdir)/permissions.d/50-udev.permissions ]; then \
echo $(INSTALL_DATA) $(LOCAL_CFG_DIR)/udev.permissions $(DESTDIR)$(configdir)/permissions.d/50-udev.permissions; \
$(INSTALL_DATA) $(LOCAL_CFG_DIR)/udev.permissions $(DESTDIR)$(configdir)/permissions.d/50-udev.permissions; \
fi
install-dev.d:
$(INSTALL) -d $(DESTDIR)$(dev_ddir)/default
@ -444,10 +438,8 @@ endif
uninstall: uninstall-man uninstall-dev.d
- rm $(hotplugdir)/10-udev.hotplug
- rm $(configdir)/rules.d/50-udev.rules
- rm $(configdir)/permissions.d/50-udev.permissions
- rm $(configdir)/udev.conf
- rmdir $(configdir)/rules.d
- rmdir $(configdir)/permissions.d
- rmdir $(configdir)
- rm $(sbindir)/$(ROOT)
- rm $(sbindir)/$(DAEMON)

View file

@ -12,19 +12,13 @@ Q. I login as my normal self from the login screen and RH just hangs on an
empty blue screen. What's wrong?
A. You have some wrong permissions. I'm guessing you can probably log in as root
but not as your normal user. Basically you need to edit the
/etc/udev/udev.permissions file to set the correct permissions to the nodes
in /dev. I added the following:
null:root:users:0666
urandom:root:users:0644
setting the correct permissions to null and urandom allowed me to login
as myself and not at root.
but not as your normal user. Basically you need to set the right
permissions with a rule. Setting the correct permissions to null and urandom
allowed me to login as myself and not at root.
While you are there you might want to set the permissions to ptmx as well
or you may have trouble getting a bash prompt in an xterm. i.e.
ptmx:root:users:0666 Also refer to the next question.
or you may have trouble getting a bash prompt in an xterm. Also refer to the
next question.
Q. I'm having trouble getting a bash prompt from my xterm. i.e. I bring up a
terminal and all I have is a blank screen with a blinking cursor.

View file

@ -14,19 +14,16 @@ udev_db="@udevdir@/.udevdb"
# udev_rules - The name and location of the udev rules file
udev_rules="@configdir@/rules.d"
# udev_permissions - The name and location of the udev permission file
udev_permissions="@configdir@/permissions.d"
# default_mode - set the default mode for all nodes that have no
# explicit match in the permissions file
# permissions specified
default_mode="0600"
# default_owner - set the default owner for all nodes that have no
# explicit match in the permissions file
# permissions specified
default_owner="root"
# default_group - set the default group for all nodes that have no
# explicit match in the permissions file
# permissions specified
default_group="root"
# udev_log - set to "yes" if you want logging, else "no"

View file

@ -43,10 +43,6 @@
static struct sysfs_attribute *find_sysfs_attribute(struct sysfs_class_device *class_dev, struct sysfs_device *sysfs_device, char *attr);
LIST_HEAD(config_device_list);
LIST_HEAD(perm_device_list);
/* compare string with pattern (supports * ? [0-9] [!A-Z]) */
static int strcmp_pattern(const char *p, const char *s)
{
@ -100,18 +96,6 @@ static int strcmp_pattern(const char *p, const char *s)
return 1;
}
static struct perm_device *find_perm_entry(const char *name)
{
struct perm_device *perm;
list_for_each_entry(perm, &perm_device_list, node) {
if (strcmp_pattern(perm->name, name))
continue;
return perm;
}
return NULL;
}
/* extract possible {attr} and move str behind it */
static char *get_format_attribute(char **str)
{
@ -694,7 +678,6 @@ int namedev_name_device(struct udevice *udev, struct sysfs_class_device *class_d
struct sysfs_class_device *class_dev_parent;
struct sysfs_device *sysfs_device = NULL;
struct config_device *dev;
struct perm_device *perm;
char *pos;
udev->mode = 0;
@ -792,18 +775,7 @@ int namedev_name_device(struct udevice *udev, struct sysfs_class_device *class_d
goto exit;
perms:
/* apply permissions from permissions file to empty fields */
perm = find_perm_entry(udev->name);
if (perm != NULL) {
if (udev->mode == 0000)
udev->mode = perm->mode;
if (udev->owner[0] == '\0')
strfieldcpy(udev->owner, perm->owner);
if (udev->group[0] == '\0')
strfieldcpy(udev->group, perm->group);
}
/* apply permissions from config to empty fields */
/* apply default permissions to empty fields */
if (udev->mode == 0000)
udev->mode = default_mode;
if (udev->owner[0] == '\0')
@ -817,20 +789,3 @@ perms:
exit:
return 0;
}
int namedev_init(void)
{
int retval;
retval = namedev_init_rules();
if (retval)
return retval;
retval = namedev_init_permissions();
if (retval)
return retval;
dump_config_dev_list();
dump_perm_dev_list();
return retval;
}

View file

@ -58,7 +58,6 @@ struct sysfs_class_device;
#define MAX_SYSFS_PAIRS 5
#define RULEFILE_SUFFIX ".rules"
#define PERMFILE_SUFFIX ".permissions"
struct sysfs_pair {
char file[FILE_SIZE];
@ -88,26 +87,12 @@ struct config_device {
int config_line;
};
struct perm_device {
struct list_head node;
char name[NAME_SIZE];
char owner[USER_SIZE];
char group[USER_SIZE];
unsigned int mode;
};
extern struct list_head config_device_list;
extern struct list_head perm_device_list;
extern int namedev_init(void);
extern int namedev_name_device(struct udevice *udev, struct sysfs_class_device *class_dev);
extern int namedev_init_permissions(void);
extern int namedev_init_rules(void);
extern void dump_config_dev(struct config_device *dev);
extern void dump_config_dev_list(void);
extern void dump_perm_dev(struct perm_device *dev);
extern void dump_perm_dev_list(void);
#endif

View file

@ -40,6 +40,7 @@
#include "logging.h"
#include "namedev.h"
LIST_HEAD(config_device_list);
static int add_config_dev(struct config_device *new_dev)
{
@ -74,53 +75,6 @@ void dump_config_dev_list(void)
dump_config_dev(dev);
}
static int add_perm_dev(struct perm_device *new_dev)
{
struct perm_device *dev;
struct perm_device *tmp_dev;
/* if we already have that entry, just update the values */
list_for_each_entry(dev, &perm_device_list, node) {
if (strcmp(new_dev->name, dev->name) != 0)
continue;
/* don't overwrite values from earlier entries */
if (dev->mode == 0000)
dev->mode = new_dev->mode;
if (dev->owner[0] == '\0')
strfieldcpy(dev->owner, new_dev->owner);
if (dev->owner[0] == '\0')
strfieldcpy(dev->group, new_dev->group);
return 0;
}
/* not found, add new structure to the perm list */
tmp_dev = malloc(sizeof(*tmp_dev));
if (!tmp_dev)
return -ENOMEM;
memcpy(tmp_dev, new_dev, sizeof(*tmp_dev));
list_add_tail(&tmp_dev->node, &perm_device_list);
/* dump_perm_dev(tmp_dev); */
return 0;
}
void dump_perm_dev(struct perm_device *dev)
{
dbg_parse("name='%s', owner='%s', group='%s', mode=%#o",
dev->name, dev->owner, dev->group, dev->mode);
}
void dump_perm_dev_list(void)
{
struct perm_device *dev;
list_for_each_entry(dev, &perm_device_list, node)
dump_perm_dev(dev);
}
/* extract possible KEY{attr} */
static char *get_key_attribute(char *str)
{
@ -143,7 +97,7 @@ static char *get_key_attribute(char *str)
return NULL;
}
static int namedev_parse_rules(const char *filename, void *data)
static int namedev_parse(const char *filename, void *data)
{
char line[LINE_SIZE];
char *bufline;
@ -362,124 +316,18 @@ error:
return retval;
}
static int namedev_parse_permissions(const char *filename, void *data)
int namedev_init(void)
{
char line[LINE_SIZE];
char *bufline;
char *temp;
char *temp2;
char *buf;
size_t bufsize;
size_t cur;
size_t count;
int retval = 0;
struct perm_device dev;
int lineno;
struct stat stats;
int retval;
if (file_map(filename, &buf, &bufsize) == 0) {
dbg("reading '%s' as permissions file", filename);
} else {
dbg("can't open '%s' as permissions file", filename);
if (stat(udev_rules_filename, &stats) != 0)
return -1;
}
/* loop through the whole file */
cur = 0;
lineno = 0;
while (cur < bufsize) {
count = buf_get_line(buf, bufsize, cur);
bufline = &buf[cur];
cur += count+1;
lineno++;
if ((stats.st_mode & S_IFMT) != S_IFDIR)
retval = namedev_parse(udev_rules_filename, NULL);
else
retval = call_foreach_file(namedev_parse, udev_rules_filename, RULEFILE_SUFFIX, NULL);
if (count >= LINE_SIZE) {
info("line too long, rule skipped %s, line %d",
filename, lineno);
continue;
}
/* eat the whitespace */
while ((count > 0) && isspace(bufline[0])) {
bufline++;
count--;
}
if (count == 0)
continue;
/* see if this is a comment */
if (bufline[0] == COMMENT_CHARACTER)
continue;
strncpy(line, bufline, count);
line[count] = '\0';
dbg_parse("read '%s'", line);
/* parse the line */
memset(&dev, 0x00, sizeof(struct perm_device));
temp = line;
temp2 = strsep(&temp, ":");
if (!temp2) {
dbg("cannot parse line '%s'", line);
continue;
}
strfieldcpy(dev.name, temp2);
temp2 = strsep(&temp, ":");
if (!temp2) {
dbg("cannot parse line '%s'", line);
continue;
}
strfieldcpy(dev.owner, temp2);
temp2 = strsep(&temp, ":");
if (!temp2) {
dbg("cannot parse line '%s'", line);
continue;
}
strfieldcpy(dev.group, temp2);
if (!temp) {
dbg("cannot parse line '%s'", line);
continue;
}
dev.mode = strtol(temp, NULL, 8);
dbg_parse("name='%s', owner='%s', group='%s', mode=%#o",
dev.name, dev.owner, dev.group, dev.mode);
retval = add_perm_dev(&dev);
if (retval) {
dbg("add_perm_dev returned with error %d", retval);
goto exit;
}
}
exit:
file_unmap(buf, bufsize);
return retval;
}
int namedev_init_rules(void)
{
struct stat stats;
stat(udev_rules_filename, &stats);
if ((stats.st_mode & S_IFMT) != S_IFDIR)
return namedev_parse_rules(udev_rules_filename, NULL);
else
return call_foreach_file(namedev_parse_rules, udev_rules_filename,
RULEFILE_SUFFIX, NULL);
}
int namedev_init_permissions(void)
{
struct stat stats;
stat(udev_permissions_filename, &stats);
if ((stats.st_mode & S_IFMT) != S_IFDIR)
return namedev_parse_permissions(udev_permissions_filename, NULL);
else
return call_foreach_file(namedev_parse_permissions, udev_permissions_filename,
PERMFILE_SUFFIX, NULL);
}

View file

@ -16,7 +16,6 @@ cat > $CONFIG << EOF
udev_root="$PWD/udev/"
udev_db="$PWD/udev/.udevdb"
udev_rules="$PWD/$RULES"
udev_permissions="$PWD/udev.permissions"
EOF
mkdir udev

View file

@ -15,7 +15,6 @@ cat > $CONFIG << EOF
udev_root="$PWD/udev/"
udev_db="$PWD/udev/.udevdb"
udev_rules="$PWD/$RULES"
udev_permissions="$PWD/udev.permissions"
EOF
mkdir udev

View file

@ -15,7 +15,6 @@ cat > $CONFIG << EOF
udev_root="$PWD/udev/"
udev_db="$PWD/udev/.udevdb"
udev_rules="$PWD/$RULES"
udev_permissions="$PWD/udev.permissions"
EOF
mkdir udev

View file

@ -31,7 +31,6 @@ my $sysfs = "sys/";
my $udev_bin = "../udev";
my $udev_root = "udev-root/"; # !!! directory will be removed !!!
my $udev_db = ".udevdb";
my $perm = "udev.permissions";
my $main_conf = "udev-test.conf";
my $conf_tmp = "udev-test.rules";
@ -503,167 +502,17 @@ BUS="scsi", SYSFS{whitespace_test}="WHITE SPACE ", NAME="matched-with-space"
EOF
},
{
desc => "permissions test",
subsys => "block",
devpath => "/block/sda",
exp_name => "node",
exp_perms => "5000::0444",
conf => <<EOF
BUS="scsi", KERNEL="sda", NAME="node", OWNER="5000", MODE="0444"
EOF
},
{
desc => "permissions ttyUSB0:root:uucp:0660",
subsys => "tty",
devpath => "/class/tty/ttyUSB0",
exp_name => "ttyUSB0",
exp_perms => "0:14:0660",
conf => <<EOF
KERNEL="ttyUSB[0-9]*", NAME="ttyUSB%n"
EOF
},
{
desc => "permissions tty0::root:0444",
subsys => "tty",
devpath => "/class/tty/tty0",
exp_name => "tty0",
exp_perms => "0:0:0444",
conf => <<EOF
KERNEL="tty0", NAME="tty0"
EOF
},
{
desc => "permissions tty1:root::0555",
subsys => "tty",
devpath => "/class/tty/tty1",
exp_name => "tty1",
exp_perms => "0:0:0555",
conf => <<EOF
KERNEL="tty1", NAME="tty1"
EOF
},
{
desc => "permissions tty2:::0777",
subsys => "tty",
devpath => "/class/tty/tty2",
exp_name => "tty2",
exp_perms => "0:0:0777",
conf => <<EOF
KERNEL="tty2", NAME="tty2"
EOF
},
{
desc => "permissions tty3::: (default mode applied)",
subsys => "tty",
devpath => "/class/tty/tty3",
exp_name => "tty3",
exp_perms => "0:0:600",
conf => <<EOF
KERNEL="tty3", NAME="tty3"
EOF
},
{
desc => "permissions i2c-300:root:sys:0744",
subsys => "i2c-dev",
devpath => "/class/i2c-dev/i2c-300",
exp_name => "i2c-300",
exp_perms => "0:3:0744",
conf => <<EOF
KERNEL="i2c-300", NAME="i2c-300"
EOF
},
{
desc => "permissions i2c-fake1:root:7:0007",
subsys => "i2c-dev",
devpath => "/class/i2c-dev/i2c-fake1",
exp_name => "i2c-fake1",
exp_perms => "0:7:0007",
conf => <<EOF
KERNEL="i2c-fake1", NAME="i2c-fake1"
EOF
},
{
desc => "permissions ttyS[01]:0:5:0700",
subsys => "tty",
devpath => "/class/tty/ttyS1",
exp_name => "ttyS1",
exp_perms => "0:5:0700",
conf => <<EOF
KERNEL="ttyS1", NAME="ttyS1"
EOF
},
{
desc => "permissions ttyS[4-9]:tty:5:0060",
subsys => "tty",
devpath => "/class/tty/ttyS7",
exp_name => "ttyS7",
exp_perms => "0:5:0060",
conf => <<EOF
KERNEL="ttyS7", NAME="ttyS7"
EOF
},
{
desc => "permissions tty4:0:5:0707",
subsys => "ttyS4",
devpath => "/class/tty/tty4",
exp_name => "tty4",
exp_perms => "0:5:0707",
conf => <<EOF
KERNEL="tty4", NAME="tty4"
EOF
},
{
desc => "permissions tty4?:0:5:0007",
subsys => "tty",
devpath => "/class/tty/tty44",
exp_name => "tty44",
exp_perms => "0:5:0007",
conf => <<EOF
KERNEL="tty44", NAME="tty44"
EOF
},
{
desc => "permissions tty3[!3]:::0467",
subsys => "tty",
devpath => "/class/tty/tty35",
exp_name => "tty35",
exp_perms => "0:0:0467",
conf => <<EOF
KERNEL="tty35", NAME="tty35"
EOF
},
{
desc => "permissions tty33:bad:name:0500",
desc => "permissions USER=bad GROUP=name",
subsys => "tty",
devpath => "/class/tty/tty33",
exp_name => "tty33",
exp_perms => "0:0:0500",
exp_perms => "0:0:0600",
conf => <<EOF
KERNEL="tty33", NAME="tty33"
KERNEL="tty33", NAME="tty33", OWNER="bad", GROUP="name"
EOF
},
{
desc => "permissions rtc:0:users:0600",
subsys => "misc",
devpath => "/class/misc/rtc",
exp_name => "misc/rtc",
exp_perms => "0:100:0600",
conf => <<EOF
KERNEL="rtc", NAME="misc/rtc"
EOF
},
{
desc => "permissions misc:0:users:0600",
subsys => "misc",
devpath => "/class/misc/psaux",
exp_name => "misc/psaux",
exp_perms => "0:100:0600",
conf => <<EOF
KERNEL="psaux", NAME="misc/psaux"
EOF
},
{
desc => "permissions set OWNER=5000",
desc => "permissions OWNER=5000",
subsys => "block",
devpath => "/block/sda",
exp_name => "node",
@ -673,7 +522,7 @@ BUS="scsi", KERNEL="sda", NAME="node", OWNER="5000"
EOF
},
{
desc => "permissions set GROUP=100",
desc => "permissions GROUP=100",
subsys => "block",
devpath => "/block/sda",
exp_name => "node",
@ -683,7 +532,7 @@ BUS="scsi", KERNEL="sda", NAME="node", GROUP="100"
EOF
},
{
desc => "permissions set mode=0777",
desc => "permissions MODE=0777",
subsys => "block",
devpath => "/block/sda",
exp_name => "node",
@ -693,7 +542,7 @@ BUS="scsi", KERNEL="sda", NAME="node", MODE="0777"
EOF
},
{
desc => "permissions set OWNER=5000 GROUP=100 MODE=0777",
desc => "permissions OWNER=5000 GROUP=100 MODE=0777",
subsys => "block",
devpath => "/block/sda",
exp_name => "node",
@ -703,37 +552,37 @@ BUS="scsi", KERNEL="sda", NAME="node", OWNER="5000", GROUP="100", MODE="0777"
EOF
},
{
desc => "permissions override OWNER to 5000",
desc => "permissions OWNER to 5000",
subsys => "tty",
devpath => "/class/tty/ttyUSB0",
exp_name => "ttyUSB0",
exp_perms => "5000:14:0660",
exp_perms => "5000::",
conf => <<EOF
KERNEL="ttyUSB[0-9]*", NAME="ttyUSB%n", OWNER="5000"
EOF
},
{
desc => "permissions override GROUP to 100",
desc => "permissions GROUP to 100",
subsys => "tty",
devpath => "/class/tty/ttyUSB0",
exp_name => "ttyUSB0",
exp_perms => ":100:0660",
exp_perms => ":100:0600",
conf => <<EOF
KERNEL="ttyUSB[0-9]*", NAME="ttyUSB%n", GROUP="100"
EOF
},
{
desc => "permissions override MODE to 0060",
desc => "permissions MODE to 0060",
subsys => "tty",
devpath => "/class/tty/ttyUSB0",
exp_name => "ttyUSB0",
exp_perms => ":14:0060",
exp_perms => "::0060",
conf => <<EOF
KERNEL="ttyUSB[0-9]*", NAME="ttyUSB%n", MODE="0060"
EOF
},
{
desc => "permissions override OWNER, GROUP, MODE",
desc => "permissions OWNER, GROUP, MODE",
subsys => "tty",
devpath => "/class/tty/ttyUSB0",
exp_name => "ttyUSB0",
@ -1336,7 +1185,9 @@ open CONF, ">$main_conf" || die "unable to create config file: $main_conf";
print CONF "udev_root=\"$udev_root\"\n";
print CONF "udev_db=\"$udev_db\"\n";
print CONF "udev_rules=\"$conf_tmp\"\n";
print CONF "udev_permissions=\"$perm\"\n";
print CONF "default_mode=\"0600\"\n";
print CONF "default_owner=\"root\"\n";
print CONF "default_group=\"root\"\n";
close CONF;
my $test_num = 1;

View file

@ -1,22 +0,0 @@
#name:user:group:mode
ttyUSB0:root:uucp:0660
ttyUSB1:root:uucp:0666
visor:500:500:0666
dsp1:::0666
boot_disk?:::0666
#used for permissions tests in udev-test.pl
tty0::root:0444
tty1:root::0555
tty2:::0777
tty3:::
rtc:0:6:0770
misc/*:0:users:0600
i2c-fake1:root:7:0007
i2c*:root:sys:0744
ttyS[01]:0:5:0700
ttyS[5-9]:root:5:0060
tty4::tty:0707
tty4?::tty:0007
tty3[!3]:::0467
tty33:bad:name:0500

View file

@ -55,13 +55,6 @@ The name of the udev rules file or directory to look for files with the suffix
All rule files are read in lexical order. The default value is
.IR /etc/udev/rules.d/ .
.TP
.B udev_permissions
The name of the udev permission file or directory to look for files with the
suffix
.IR .permissions .
All permission files are read in lexical order. The default value is
.IR /etc/udev/permissions.d/ .
.TP
.B udev_log
The switch to enable/disable logging of udev information
The default value is
@ -96,10 +89,6 @@ udev_db="/udev/.udevdb"
for files with the suffix .rules
udev_rules="/etc/udev/rules.d/"
# udev_permissions - The name of the udev permission file or directory
to look for files with the suffix .permissions
udev_permissions="/etc/udev/udev.permissions"
# udev_log - set to "yes" if you want logging, else "no"
udev_log="yes"
@ -214,8 +203,8 @@ separate rules file, while the device nodes are maintained by the
distribution provided rules file.
.TP
.B OWNER, GROUP, MODE
The permissions for this device. Every specified value overwrites the value
given in the permissions file.
The permissions for this device. Every specified value overwrites the default
value specified in the config file.
.P
.RB "The " NAME " ," SYMLINK " and " PROGRAM
fields support simple printf-like string substitutions:
@ -299,29 +288,6 @@ KERNEL="hd[a-z]", PROGRAM="/bin/cat /proc/ide/%k/media", RESULT="cdrom",
NAME="%k", SYMLINK="cdrom%e"
.fi
.P
The permissions and ownership of the created device file are read from
the files located in the
.I /etc/udev/permissions.d/
directory, or at the location specified by the
.I udev_permission
value in the
.I /etc/udev/udev.conf
file.
.br
Every line lists a device name followed by owner, group and permission
mode. All values are separated by colons. The name field may contain a
pattern to apply the values to a whole class of devices.
.sp
.RI "A sample " udev.permissions " file might look like this:"
.sp
.nf
#name:user:group:mode
input/*:root:root:644
ttyUSB1:0:8:0660
video*:root:video:0660
dsp1:::0666
.fi
.P
A number of different fields in the above configuration files support a simple
form of shell style pattern matching. It supports the following pattern characters:
.TP

2
udev.c
View file

@ -187,7 +187,7 @@ int main(int argc, char *argv[], char *envp[])
wait_for_class_device(class_dev, &error);
/* init rules, permissions */
/* init rules */
namedev_init();
/* name, create node, store in db */

1
udev.h
View file

@ -80,7 +80,6 @@ extern void udev_multiplex_directory(struct udevice *udev, const char *basedir,
extern char sysfs_path[SYSFS_PATH_MAX];
extern char udev_root[PATH_MAX];
extern char udev_db_path[PATH_MAX+NAME_MAX];
extern char udev_permissions_filename[PATH_MAX+NAME_MAX];
extern char udev_config_filename[PATH_MAX+NAME_MAX];
extern char udev_rules_filename[PATH_MAX+NAME_MAX];
extern mode_t default_mode;

View file

@ -98,7 +98,6 @@ rm -rf $RPM_BUILD_ROOT
%defattr(-,root,root)
%doc COPYING README TODO ChangeLog HOWTO* docs/*
%doc etc/udev/udev.rules.{examples,gentoo,redhat}
%doc etc/udev/udev.permissions.{gentoo,redhat}
%attr(755,root,root) /sbin/udev
%attr(755,root,root) /usr/bin/udevinfo
%attr(755,root,root) /sbin/udevsend
@ -109,9 +108,7 @@ rm -rf $RPM_BUILD_ROOT
%attr(755,root,root) %dir /etc/udev/
%config(noreplace) %attr(0644,root,root) /etc/udev/udev.conf
%attr(755,root,root) %dir /etc/udev/rules.d/
%attr(755,root,root) %dir /etc/udev/permissions.d/
%config(noreplace) %attr(0644,root,root) /etc/udev/rules.d/50-udev.rules
%config(noreplace) %attr(0644,root,root) /etc/udev/permissions.d/50-udev.permissions
%attr(-,root,root) /etc/hotplug.d/default/udev.hotplug
%attr(755,root,root) /etc/init.d/udev
%attr(0644,root,root) %{_mandir}/man8/udev*.8*

View file

@ -43,7 +43,6 @@
char sysfs_path[SYSFS_PATH_MAX];
char udev_root[PATH_MAX];
char udev_db_path[PATH_MAX+NAME_MAX];
char udev_permissions_filename[PATH_MAX+NAME_MAX];
char udev_rules_filename[PATH_MAX+NAME_MAX];
char udev_config_filename[PATH_MAX+NAME_MAX];
mode_t default_mode;
@ -74,7 +73,6 @@ static void init_variables(void)
strcpy(udev_db_path, UDEV_DB);
strcpy(udev_config_filename, UDEV_CONFIG_FILE);
strcpy(udev_rules_filename, UDEV_RULES_FILE);
strcpy(udev_permissions_filename, UDEV_PERMISSION_FILE);
strcpy(default_owner, "root");
strcpy(default_group, "root");
@ -206,12 +204,6 @@ static int parse_config_file(void)
continue;
}
if (strcasecmp(variable, "udev_permissions") == 0) {
strfieldcpy(udev_permissions_filename, value);
no_trailing_slash(udev_permissions_filename);
continue;
}
if (strcasecmp(variable, "default_mode") == 0) {
default_mode = strtol(value, NULL, 8);
continue;
@ -267,7 +259,6 @@ static void get_dirs(void)
dbg_parse("udev_config_filename = %s", udev_config_filename);
dbg_parse("udev_db_path = %s", udev_db_path);
dbg_parse("udev_rules_filename = %s", udev_rules_filename);
dbg_parse("udev_permissions_filename = %s", udev_permissions_filename);
dbg_parse("udev_log = %d", udev_log);
parse_config_file();
@ -276,7 +267,6 @@ static void get_dirs(void)
dbg("udev_config_filename = %s", udev_config_filename);
dbg("udev_db_path = %s", udev_db_path);
dbg("udev_rules_filename = %s", udev_rules_filename);
dbg("udev_permissions_filename = %s", udev_permissions_filename);
dbg("udev_log = %d", udev_log);
}