#include <errno.h>
#include "udev.h"
-#include "udev_lib.h"
+#include "udev_utils.h"
#include "logging.h"
#include "namedev.h"
struct perm_device *dev;
struct perm_device *tmp_dev;
- /* update the values if we already have the device */
+ /* if we already have that entry, just update the values */
list_for_each_entry(dev, &perm_device_list, node) {
if (strcmp(new_dev->name, dev->name) != 0)
continue;
- set_empty_perms(dev, new_dev->mode, new_dev->owner, new_dev->group);
+ /* don't overwrite values from earlier entries */
+ if (dev->mode == 0000)
+ dev->mode = new_dev->mode;
+ if (dev->owner[0] == '\0')
+ strfieldcpy(dev->owner, new_dev->owner);
+ if (dev->owner[0] == '\0')
+ strfieldcpy(dev->group, new_dev->group);
+
return 0;
}
memcpy(tmp_dev, new_dev, sizeof(*tmp_dev));
list_add_tail(&tmp_dev->node, &perm_device_list);
- //dump_perm_dev(tmp_dev);
+ /* dump_perm_dev(tmp_dev); */
+
return 0;
}
if (strncasecmp(temp2, FIELD_NAME, sizeof(FIELD_NAME)-1) == 0) {
attr = get_key_attribute(temp2 + sizeof(FIELD_NAME)-1);
- if (attr != NULL && strcasecmp(attr, ATTR_PARTITIONS) == 0) {
+ if (attr != NULL) {
+ if (strstr(attr, ATTR_PARTITIONS) != NULL) {
dbg_parse("creation of partition nodes requested");
dev.partitions = PARTITIONS_COUNT;
}
+ if (strstr(attr, ATTR_IGNORE_REMOVE) != NULL) {
+ dbg_parse("remove event should be ignored");
+ dev.ignore_remove = 1;
+ }
+ }
strfieldcpy(dev.name, temp3);
valid = 1;
continue;