From c112873b5bc9ebbae39c32f502bc6211f33546cc Mon Sep 17 00:00:00 2001 From: Kay Sievers Date: Mon, 30 May 2011 02:12:02 +0200 Subject: [PATCH 1/2] rules: static_node - use 0660 if group is given to get the cigar >> On Tue, May 24, 2011 at 15:33, Tom Gundersen wrote: > > Close, but no cigar. Looks like the static nodes are not assigned > permissions 0660 even if a gid is set (the nodes have perms 0600). > > Cheers, > > Tom --- udev/udev-rules.c | 10 ++++++++-- 1 files changed, 8 insertions(+), 2 deletions(-) diff --git a/udev/udev-rules.c b/udev/udev-rules.c index 48395e7..56a258d 100644 --- a/udev/udev-rules.c +++ b/udev/udev-rules.c @@ -2709,8 +2709,9 @@ void udev_rules_apply_static_dev_perms(struct udev_rules *rules) case TK_A_STATIC_NODE: { char filename[UTIL_PATH_SIZE]; struct stat stats; + /* we assure, that the permissions tokens are sorted before the static token */ - if (mode == 0 && uid == 0 && gid == 0) + if (uid == 0 && gid == 0) goto next; util_strscpyl(filename, sizeof(filename), udev_get_dev_path(rules->udev), "/", &rules->buf[cur->key.value_off], NULL); @@ -2718,14 +2719,19 @@ void udev_rules_apply_static_dev_perms(struct udev_rules *rules) goto next; if (!S_ISBLK(stats.st_mode) && !S_ISCHR(stats.st_mode)) goto next; - if (mode != 0 && mode != (stats.st_mode & 0777)) { + + if (mode == 0 && gid > 0) + mode = 0660; + if (mode != (stats.st_mode & 0777)) { chmod(filename, mode); info(rules->udev, "chmod '%s' %#o\n", filename, mode); } + if ((uid != 0 && uid != stats.st_uid) || (gid != 0 && gid != stats.st_gid)) { chown(filename, uid, gid); info(rules->udev, "chown '%s' %u %u\n", filename, uid, gid); } + utimensat(AT_FDCWD, filename, NULL, 0); break; } -- 1.7.5.2