diff options
author | mbuesch@freenet.de <mbuesch@freenet.de> | 2005-02-06 00:13:18 +0100 |
---|---|---|
committer | Greg KH <gregkh@suse.de> | 2005-04-26 23:24:19 -0700 |
commit | 3887557706fed195d85c958d5a07eb744b179e4c (patch) | |
tree | 5babd4130192ce704dfa7a226a7d059ef89120fd /namedev.c | |
parent | 0786e8e541dcc0a82a57c96569519815c38962f3 (diff) |
[PATCH] namdev: allow symlink-only rules to specify node permissions
First case without the patch:
KERNEL="hd*", GROUP="disk", MODE="0660"
KERNEL="hdc", SYMLINK="cdrecorder", MODE="0666"
brw-rw---- 1 root disk 22, 0 Feb 5 14:08 /dev/hdc
Second case without the patch:
KERNEL="hd*", GROUP="disk", MODE="0660"
KERNEL="hdc", MODE="0666"
brw-rw-rw- 1 root disk 22, 0 Feb 5 14:08 /dev/hdc
Diffstat (limited to 'namedev.c')
-rw-r--r-- | namedev.c | 61 |
1 files changed, 25 insertions, 36 deletions
@@ -670,7 +670,6 @@ try_parent: dbg("sysfs_device->path='%s'", sysfs_device->path); dbg("sysfs_device->bus_id='%s'", sysfs_device->bus_id); } - } int namedev_name_device(struct udevice *udev, struct sysfs_class_device *class_dev) @@ -716,32 +715,32 @@ int namedev_name_device(struct udevice *udev, struct sysfs_class_device *class_d list_for_each_entry(dev, &config_device_list, node) { dbg("process rule"); if (match_rule(udev, dev, class_dev, sysfs_device) == 0) { - if (dev->name[0] == '\0' && dev->symlink[0] == '\0') { - /* empty name, symlink, perms will not create any node */ - if (dev->mode == 0000 && dev->owner[0] == '\0' && dev->group[0] == '\0') { - info("configured rule in '%s[%i]' applied, '%s' is ignored", - dev->config_file, dev->config_line, udev->kernel_name); - return -1; - } - /* apply permissions only rule values */ - if (dev->mode != 0000) { - udev->mode = dev->mode; - dbg("applied mode=%#o to '%s'", udev->mode, udev->kernel_name); - } - if (dev->owner[0] != '\0') { - strfieldcpy(udev->owner, dev->owner); - apply_format(udev, udev->owner, sizeof(udev->owner), class_dev, sysfs_device); - dbg("applied owner='%s' to '%s'", udev->owner, udev->kernel_name); - } - if (dev->group[0] != '\0') { - strfieldcpy(udev->group, dev->group); - apply_format(udev, udev->group, sizeof(udev->group), class_dev, sysfs_device); - dbg("applied group='%s' to '%s'", udev->group, udev->kernel_name); - } + /* empty name, symlink and perms will not create any node */ + if (dev->name[0] == '\0' && dev->symlink[0] == '\0' && + dev->mode == 0000 && dev->owner[0] == '\0' && dev->group[0] == '\0') { + info("configured rule in '%s[%i]' applied, '%s' is ignored", + dev->config_file, dev->config_line, udev->kernel_name); + return -1; } - /* collect symlinks for the final matching rule */ + /* apply permissions */ + if (dev->mode != 0000) { + udev->mode = dev->mode; + dbg("applied mode=%#o to '%s'", udev->mode, udev->kernel_name); + } + if (dev->owner[0] != '\0') { + strfieldcpy(udev->owner, dev->owner); + apply_format(udev, udev->owner, sizeof(udev->owner), class_dev, sysfs_device); + dbg("applied owner='%s' to '%s'", udev->owner, udev->kernel_name); + } + if (dev->group[0] != '\0') { + strfieldcpy(udev->group, dev->group); + apply_format(udev, udev->group, sizeof(udev->group), class_dev, sysfs_device); + dbg("applied group='%s' to '%s'", udev->group, udev->kernel_name); + } + + /* collect symlinks for this or the final matching rule */ if (dev->symlink[0] != '\0') { char temp[NAME_SIZE]; @@ -774,19 +773,9 @@ int namedev_name_device(struct udevice *udev, struct sysfs_class_device *class_d goto exit; udev->partitions = dev->partitions; - 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); + dbg("name, '%s' is going to have owner='%s', group='%s', mode=%#o partitions=%i", + udev->name, udev->owner, udev->group, udev->mode, udev->partitions); goto exit; } |