diff --git a/etc/udev/udev.conf.in b/etc/udev/udev.conf.in index d06b0b0698..f9a60ab3c8 100644 --- a/etc/udev/udev.conf.in +++ b/etc/udev/udev.conf.in @@ -17,7 +17,15 @@ udev_rules="/etc/udev/udev.rules" # udev_permissions - The name and location of the udev permission file udev_permissions="/etc/udev/udev.permissions" -# default_mode - set the default mode for all nodes that have no +# default_mode - set the default mode for all nodes that have no # explicit match in the permissions file default_mode="0600" +# default_owner - set the default owner for all nodes that have no +# explicit match in the permissions file +default_owner="root" + +# default_group - set the default group for all nodes that have no +# explicit match in the permissions file +default_group="root" + diff --git a/namedev.c b/namedev.c index e39207e6a7..7fd69f7778 100644 --- a/namedev.c +++ b/namedev.c @@ -141,7 +141,7 @@ static struct perm_device *find_perm(char *name) return NULL; } -static mode_t get_default_mode(struct sysfs_class_device *class_dev) +static mode_t get_default_mode(void) { mode_t mode = 0600; /* default to owner rw only */ @@ -735,7 +735,7 @@ done: strfieldcpy(udev->group, perm->group); } else { /* no matching perms found :( */ - udev->mode = get_default_mode(class_dev); + udev->mode = get_default_mode(); strncpy(udev->owner, get_default_owner(), OWNER_SIZE); strncpy(udev->group, get_default_group(), GROUP_SIZE); } diff --git a/udev-add.c b/udev-add.c index 9aa8bdb3e9..586911acc2 100644 --- a/udev-add.c +++ b/udev-add.c @@ -155,29 +155,29 @@ static int create_node(struct udevice *dev) dbg("chmod(%s, %#o) failed with error '%s'", filename, dev->mode, strerror(errno)); - if (*dev->owner) { + if (dev->owner[0]) { char *endptr; unsigned long id = strtoul(dev->owner, &endptr, 10); - if (*endptr == 0x00) + if (endptr[0] == '\0') uid = (uid_t) id; else { struct passwd *pw = getpwnam(dev->owner); - if (!pw) - dbg("user unknown '%s'", dev->owner); + if (pw == NULL) + dbg("specified user unknown '%s'", dev->owner); else uid = pw->pw_uid; } } - if (*dev->group) { + if (dev->group[0]) { char *endptr; unsigned long id = strtoul(dev->group, &endptr, 10); - if (*endptr == 0x00) + if (endptr[0] == '\0') gid = (gid_t) id; else { struct group *gr = getgrnam(dev->group); - if (!gr) - dbg("group unknown '%s'", dev->group); + if (gr == NULL) + dbg("specified group unknown '%s'", dev->group); else gid = gr->gr_gid; } @@ -192,7 +192,7 @@ static int create_node(struct udevice *dev) } /* create symlink if requested */ - if (*dev->symlink) { + if (dev->symlink[0]) { symlinks = dev->symlink; while (1) { linkname = strsep(&symlinks, " "); diff --git a/udev.8 b/udev.8 index ff89e435ff..9a597276c6 100644 --- a/udev.8 +++ b/udev.8 @@ -98,6 +98,16 @@ This is the location of the udev permission file. The default value for this is This is the default mode for all nodes that have no explicit match in the permissions file. The default value for this is .I 0666 +.TP +.B default_owner +This is the default owner for all nodes that have no explicit match in the +permissions file. The default value for this is +.I root +.TP +.B default_group +This is the default group for all nodes that have no explicit match in the +permissions file. The default value for this is +.I root .br .P .RI "A sample " udev.conf " might look like this: @@ -118,6 +128,14 @@ udev_permissions="/etc/udev/udev.permissions" # default_mode - set the default mode for all nodes that have no # explicit match in the permissions file default_mode="0666" + +# default_owner - set the default owner for all nodes that have no +# explicit match in the permissions file +default_owner="root" + +# default_group - set the default group for all nodes that have no +# explicit match in the permissions file +default_group="root" .fi .P The rules for udev to use when naming devices may specified at diff --git a/udev.h b/udev.h index 963f8d2516..e5c983a212 100644 --- a/udev.h +++ b/udev.h @@ -31,6 +31,7 @@ #define NAME_SIZE 100 #define OWNER_SIZE 30 #define GROUP_SIZE 30 +#define MODE_SIZE 8 struct udevice { char name[NAME_SIZE]; @@ -67,7 +68,7 @@ extern char udev_db_filename[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 char default_mode_str[NAME_MAX]; +extern char default_mode_str[MODE_SIZE]; extern char default_owner_str[OWNER_SIZE]; extern char default_group_str[GROUP_SIZE]; diff --git a/udev_config.c b/udev_config.c index d262f2af07..e75ee3a346 100644 --- a/udev_config.c +++ b/udev_config.c @@ -45,7 +45,7 @@ char udev_db_filename[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]; -char default_mode_str[NAME_MAX]; +char default_mode_str[MODE_SIZE]; char default_owner_str[OWNER_SIZE]; char default_group_str[GROUP_SIZE];