chiark / gitweb /
[PATCH] set default owner/group in db.
authorhannal@us.ibm.com <hannal@us.ibm.com>
Tue, 20 Jan 2004 03:42:42 +0000 (19:42 -0800)
committerGreg KH <gregkh@suse.de>
Wed, 27 Apr 2005 04:13:17 +0000 (21:13 -0700)
This patch fixes a bug where the udev database stored empty strings
for Owner and Group if they were default. This patch stores the default
value into the database if not set otherwise. See example output:

crw-------    1 root     root       4,  65 Jan 16 11:13 ttyS1

P: /class/tty/ttyS1
N: ttyS1
S:
O: root
G: root

This is a bit of a hack. However, until udev supports setting the
o/g values they will be root/root anyway so the database might as
well reflect the truth instead of empty strings.

namedev.c
udev.h
udev_config.c

index 137446e255322143a08fc424c6907d87695fe9bd..e39207e6a7c58dc63ef5a5c8a9ad9abfa1ea3a6b 100644 (file)
--- a/namedev.c
+++ b/namedev.c
@@ -151,6 +151,22 @@ static mode_t get_default_mode(struct sysfs_class_device *class_dev)
        return mode;
 }
 
+static char * get_default_owner(void)
+{
+       if (strlen(default_owner_str) == 0) {
+               strncpy(default_owner_str, "root", OWNER_SIZE);
+       }
+       return default_owner_str;
+}
+
+static char * get_default_group(void)
+{
+       if (strlen(default_group_str) == 0) {
+               strncpy(default_group_str, "root", GROUP_SIZE);
+       }
+       return default_group_str;
+}
+
 static void apply_format(struct udevice *udev, unsigned char *string)
 {
        char temp[NAME_SIZE];
@@ -720,8 +736,8 @@ done:
        } else {
                /* no matching perms found :( */
                udev->mode = get_default_mode(class_dev);
-               udev->owner[0] = 0x00;
-               udev->group[0] = 0x00;
+               strncpy(udev->owner, get_default_owner(), OWNER_SIZE);
+               strncpy(udev->group, get_default_group(), GROUP_SIZE);
        }
        dbg("name, '%s' is going to have owner='%s', group='%s', mode = %#o",
            udev->name, udev->owner, udev->group, udev->mode);
diff --git a/udev.h b/udev.h
index 90aa82393911bafece7d3d9d59ef9882e9214aff..963f8d2516d7c5c29656319bbc9bef7bd05c7f05 100644 (file)
--- a/udev.h
+++ b/udev.h
@@ -68,5 +68,7 @@ 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_owner_str[OWNER_SIZE];
+extern char default_group_str[GROUP_SIZE];
 
 #endif
index 44b5767b85776893f7db1ef3e9e6b91012474807..d262f2af07112e8845d18f97de12819c598f4dee 100644 (file)
@@ -46,6 +46,8 @@ 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_owner_str[OWNER_SIZE];
+char default_group_str[GROUP_SIZE];
 
 
 static void init_variables(void)
@@ -117,6 +119,8 @@ static int parse_config_file(void)
                set_var("udev_rules", udev_rules_filename);
                set_var("udev_permissions", udev_permissions_filename);
                set_var("default_mode", default_mode_str);
+               set_var("default_owner", default_owner_str);
+               set_var("default_group", default_group_str);
        }
        dbg_parse("%s:%d:%Zd: error parsing '%s'", udev_config_filename,
                  lineno, temp - line, temp);