summaryrefslogtreecommitdiffstats
path: root/abs/core/udev/static-nodes-permissions.patch
blob: 51e6ad6bc1e1658a5ef3a875beca093c134e5f25 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
From c112873b5bc9ebbae39c32f502bc6211f33546cc Mon Sep 17 00:00:00 2001
From: Kay Sievers <kay.sievers@vrfy.org>
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 <teg@jklm.no> 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