chiark / gitweb /
[PATCH] add support for string group and string user names in udev.permissions.
authorgreg@kroah.com <greg@kroah.com>
Mon, 24 Nov 2003 04:56:18 +0000 (20:56 -0800)
committerGreg KH <gregkh@suse.de>
Wed, 27 Apr 2005 04:13:02 +0000 (21:13 -0700)
This only works if you are using glibc.

Patch based on patch from Marco d'Itri <md@Linux.IT>

udev-add.c

index 7ba873a8d47d7a37766d1ac30bd56f9dfeb1830d..634a515c96db8e00665ffc86495e8a076e974089 100644 (file)
 #include <unistd.h>
 #include <errno.h>
 #include <sys/stat.h>
+#include <sys/types.h>
+#include <grp.h>
+#ifndef __KLIBC__
+#include <pwd.h>
+#endif
 
 #include "udev.h"
 #include "udev_version.h"
 #include "namedev.h"
 #include "udevdb.h"
 #include "libsysfs/libsysfs.h"
+#include "klibc_fixups.h"
 
 /* 
  * Right now the major/minor of a device is stored in a file called
@@ -146,8 +152,13 @@ static int create_node(struct udevice *dev)
                unsigned long id = strtoul(dev->owner, &endptr, 10);
                if (*endptr == 0x00)
                        uid = (uid_t) id;
-               else
-                       dbg("only numeric owner id supported: %s", dev->owner);
+               else {
+                       struct passwd *pw = getpwnam(dev->owner);
+                       if (!pw)
+                               dbg("user unknown: %s", dev->owner);
+                       else
+                               uid = pw->pw_uid;
+               }
        }
 
        if (*dev->group) {
@@ -155,8 +166,13 @@ static int create_node(struct udevice *dev)
                unsigned long id = strtoul(dev->group, &endptr, 10);
                if (*endptr == 0x00)
                        gid = (gid_t) id;
-               else
-                       dbg("only numeric group id supported: %s", dev->group);
+               else {
+                       struct group *gr = getgrnam(dev->group);
+                       if (!gr)
+                               dbg("group unknown: %s", dev->group);
+                       else
+                               gid = gr->gr_gid;
+               }
        }
 
        if (uid || gid) {