From: kay.sievers@vrfy.org Date: Mon, 20 Dec 2004 00:31:56 +0000 (+0100) Subject: [PATCH] simplify permission application X-Git-Tag: 051~37 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=65ab1334122b6ed427ce39f48fb40757d44f8d71 [PATCH] simplify permission application We have only one source of permissions now, so apply the default permissions at udev init. --- diff --git a/namedev.c b/namedev.c index be7ae12cd..3da783b55 100644 --- a/namedev.c +++ b/namedev.c @@ -680,7 +680,6 @@ int namedev_name_device(struct udevice *udev, struct sysfs_class_device *class_d struct config_device *dev; char *pos; - udev->mode = 0; dbg("class_dev->name='%s'", class_dev->name); /* Figure out where the "device"-symlink is at. For char devices this will @@ -757,34 +756,28 @@ int namedev_name_device(struct udevice *udev, struct sysfs_class_device *class_d goto exit; udev->partitions = dev->partitions; - udev->mode = dev->mode; - strfieldcpy(udev->owner, dev->owner); - apply_format(udev, udev->owner, sizeof(udev->owner), class_dev, sysfs_device); - strfieldcpy(udev->group, dev->group); - apply_format(udev, udev->group, sizeof(udev->group), class_dev, sysfs_device); + if (dev->mode != 0000) + udev->mode = dev->mode; + if (dev->owner[0] != '\0') { + strfieldcpy(udev->owner, dev->owner); + apply_format(udev, udev->owner, sizeof(udev->owner), class_dev, sysfs_device); + } + if (dev->group[0] != '\0') { + strfieldcpy(udev->group, dev->group); + apply_format(udev, udev->group, sizeof(udev->group), class_dev, sysfs_device); + } + + dbg("name, '%s' is going to have owner='%s', group='%s', mode = %#o", + udev->name, udev->owner, udev->group, udev->mode); - goto perms; + goto exit; } } } /* no rule matched, so we use the kernel name */ strfieldcpy(udev->name, udev->kernel_name); - - if (udev->type == 'n') - goto exit; - -perms: - /* apply default permissions to empty fields */ - if (udev->mode == 0000) - udev->mode = default_mode; - if (udev->owner[0] == '\0') - strfieldcpy(udev->owner, default_owner); - if (udev->group[0] == '\0') - strfieldcpy(udev->group, default_group); - - dbg("name, '%s' is going to have owner='%s', group='%s', mode = %#o", - udev->name, udev->owner, udev->group, udev->mode); + dbg("no rule found, use kernel name '%s'", udev->name); exit: return 0; diff --git a/udev_add.c b/udev_add.c index f537f567c..c9b30bad9 100644 --- a/udev_add.c +++ b/udev_add.c @@ -189,7 +189,7 @@ static int create_node(struct udevice *udev) } else { info("creating device node '%s', major = '%d', minor = '%d', " "mode = '%#o', uid = '%d', gid = '%d'", filename, - udev->major, udev->minor, (mode_t)udev->mode, uid, gid); + udev->major, udev->minor, udev->mode, uid, gid); } /* create all_partitions if requested */ diff --git a/udev_utils.c b/udev_utils.c index aa5c75f74..0b730d565 100644 --- a/udev_utils.c +++ b/udev_utils.c @@ -55,6 +55,10 @@ void udev_init_device(struct udevice *udev, const char* devpath, const char *sub udev->type = 'n'; else if (strncmp(udev->devpath, "/class/", 7) == 0) udev->type = 'c'; + + udev->mode = default_mode; + strfieldcpy(udev->owner, default_owner); + strfieldcpy(udev->group, default_group); } int kernel_release_satisfactory(int version, int patchlevel, int sublevel)