chiark / gitweb /
[PATCH] fix bad typo that prevents the GROUP to be applied
[elogind.git] / udev_add.c
index 58f4ee1150584b2dd4e70e0f7eafdecfeec8260c..15c6bf9fbca0ea5f951431c6870f78b2aa213c66 100644 (file)
@@ -42,7 +42,7 @@
 #include "udev_sysfs.h"
 #include "udev_version.h"
 #include "logging.h"
-#include "namedev.h"
+#include "udev_rules.h"
 #include "udev_db.h"
 #include "udev_selinux.h"
 
@@ -70,10 +70,10 @@ int udev_make_node(struct udevice *udev, const char *file, dev_t devt, mode_t mo
 
 create:
        switch (udev->type) {
-       case BLOCK:
+       case DEV_BLOCK:
                mode |= S_IFBLK;
                break;
-       case CLASS:
+       case DEV_CLASS:
                mode |= S_IFCHR;
                break;
        default:
@@ -83,6 +83,7 @@ create:
 
        selinux_setfscreatecon(file, udev->kernel_name, mode);
        retval = mknod(file, mode, devt);
+       selinux_resetfscreatecon();
        if (retval != 0) {
                dbg("mknod(%s, %#o, %u, %u) failed with error '%s'",
                    file, mode, major(devt), minor(devt), strerror(errno));
@@ -149,7 +150,7 @@ static int create_node(struct udevice *udev, struct sysfs_class_device *class_de
                if (endptr[0] == '\0')
                        gid = (gid_t) id;
                else
-                       gid = lookup_user(udev->group);
+                       gid = lookup_group(udev->group);
        }
 
        if (!udev->test_run) {
@@ -189,6 +190,7 @@ static int create_node(struct udevice *udev, struct sysfs_class_device *class_de
 
        /* create symlink(s) if requested */
        list_for_each_entry(name_loop, &udev->symlink_list, node) {
+               int retval;
                char linktarget[PATH_SIZE];
 
                snprintf(filename, sizeof(filename), "%s/%s", udev_root, name_loop->name);
@@ -218,9 +220,11 @@ static int create_node(struct udevice *udev, struct sysfs_class_device *class_de
 
                dbg("symlink(%s, %s)", linktarget, filename);
                if (!udev->test_run) {
-                       selinux_setfscreatecon(filename, udev->kernel_name, S_IFLNK);
                        unlink(filename);
-                       if (symlink(linktarget, filename) != 0)
+                       selinux_setfscreatecon(filename, udev->kernel_name, S_IFLNK);
+                       retval = symlink(linktarget, filename);
+                       selinux_resetfscreatecon();
+                       if (retval != 0)
                                dbg("symlink(%s, %s) failed with error '%s'",
                                    linktarget, filename, strerror(errno));
                }
@@ -264,7 +268,7 @@ int udev_add_device(struct udevice *udev, struct sysfs_class_device *class_dev)
        char *pos;
        int retval = 0;
 
-       if (udev->type == BLOCK || udev->type == CLASS) {
+       if (udev->type == DEV_BLOCK || udev->type == DEV_CLASS) {
                udev->devt = get_devt(class_dev);
                if (!udev->devt) {
                        dbg("no dev-file found, do nothing");
@@ -272,14 +276,14 @@ int udev_add_device(struct udevice *udev, struct sysfs_class_device *class_dev)
                }
        }
 
-       if (namedev_name_device(udev, class_dev) != 0)
+       if (udev_rules_get_name(udev, class_dev) != 0)
                return 0;
 
        dbg("adding name='%s'", udev->name);
 
        selinux_init();
 
-       if (udev->type == BLOCK || udev->type == CLASS) {
+       if (udev->type == DEV_BLOCK || udev->type == DEV_CLASS) {
                retval = create_node(udev, class_dev);
                if (retval != 0)
                        goto exit;
@@ -292,7 +296,7 @@ int udev_add_device(struct udevice *udev, struct sysfs_class_device *class_dev)
                snprintf(udev->devname, sizeof(udev->devname), "%s/%s", udev_root, udev->name);
                udev->devname[sizeof(udev->devname)-1] = '\0';
 
-       } else if (udev->type == NET) {
+       } else if (udev->type == DEV_NET) {
                /* look if we want to change the name of the netif */
                if (strcmp(udev->name, udev->kernel_name) != 0) {
                        retval = rename_net_if(udev);
@@ -317,7 +321,7 @@ int udev_add_device(struct udevice *udev, struct sysfs_class_device *class_dev)
        }
 
 exit:
-       selinux_restore();
+       selinux_exit();
 
        return retval;
 }