Zbigniew Jędrzejewski-Szmek 62fe94
From 9eacea6b51bb86fb2c066bd4fa7cba28a17d12f3 Mon Sep 17 00:00:00 2001
Zbigniew Jędrzejewski-Szmek 62fe94
From: Daniel Mack <daniel@zonque.org>
Zbigniew Jędrzejewski-Szmek 62fe94
Date: Sat, 20 Sep 2014 04:34:30 +0200
Zbigniew Jędrzejewski-Szmek 62fe94
Subject: [PATCH] bus-policy: resolve [ug]id of POLICY_ITEM_{USER,GROUP}
Zbigniew Jędrzejewski-Szmek 62fe94
Zbigniew Jędrzejewski-Szmek 62fe94
Do the lookup during parsing already, and set i->uid, or i->gid to the
Zbigniew Jędrzejewski-Szmek 62fe94
numerical values.
Zbigniew Jędrzejewski-Szmek 62fe94
---
Zbigniew Jędrzejewski-Szmek 62fe94
 src/bus-proxyd/bus-policy.c | 28 ++++++++++++++++++++++++++++
Zbigniew Jędrzejewski-Szmek 62fe94
 1 file changed, 28 insertions(+)
Zbigniew Jędrzejewski-Szmek 62fe94
Zbigniew Jędrzejewski-Szmek 62fe94
diff --git a/src/bus-proxyd/bus-policy.c b/src/bus-proxyd/bus-policy.c
Zbigniew Jędrzejewski-Szmek 62fe94
index 2c4708dd77..ab16cda32b 100644
Zbigniew Jędrzejewski-Szmek 62fe94
--- a/src/bus-proxyd/bus-policy.c
Zbigniew Jędrzejewski-Szmek 62fe94
+++ b/src/bus-proxyd/bus-policy.c
Zbigniew Jędrzejewski-Szmek 62fe94
@@ -525,8 +525,36 @@ static int file_load(Policy *p, const char *path) {
Zbigniew Jędrzejewski-Szmek 62fe94
                                         return -EINVAL;
Zbigniew Jędrzejewski-Szmek 62fe94
                                 }
Zbigniew Jędrzejewski-Szmek 62fe94
 
Zbigniew Jędrzejewski-Szmek 62fe94
+                                switch (i->class) {
Zbigniew Jędrzejewski-Szmek 62fe94
+                                case POLICY_ITEM_USER:
Zbigniew Jędrzejewski-Szmek 62fe94
+                                        if (!streq(name, "*")) {
Zbigniew Jędrzejewski-Szmek 62fe94
+                                                const char *u = name;
Zbigniew Jędrzejewski-Szmek 62fe94
+
Zbigniew Jędrzejewski-Szmek 62fe94
+                                                r = get_user_creds(&u, &i->uid, NULL, NULL, NULL);
Zbigniew Jędrzejewski-Szmek 62fe94
+                                                if (r < 0)
Zbigniew Jędrzejewski-Szmek 62fe94
+                                                        log_error("Failed to resolve user %s: %s", name, strerror(-r));
Zbigniew Jędrzejewski-Szmek 62fe94
+                                                else
Zbigniew Jędrzejewski-Szmek 62fe94
+                                                        i->uid_valid = true;
Zbigniew Jędrzejewski-Szmek 62fe94
+                                        }
Zbigniew Jędrzejewski-Szmek 62fe94
+                                        break;
Zbigniew Jędrzejewski-Szmek 62fe94
+                                case POLICY_ITEM_GROUP:
Zbigniew Jędrzejewski-Szmek 62fe94
+                                        if (!streq(name, "*")) {
Zbigniew Jędrzejewski-Szmek 62fe94
+                                                const char *g = name;
Zbigniew Jędrzejewski-Szmek 62fe94
+
Zbigniew Jędrzejewski-Szmek 62fe94
+                                                r = get_group_creds(&g, &i->gid);
Zbigniew Jędrzejewski-Szmek 62fe94
+                                                if (r < 0)
Zbigniew Jędrzejewski-Szmek 62fe94
+                                                        log_error("Failed to resolve group %s: %s", name, strerror(-r));
Zbigniew Jędrzejewski-Szmek 62fe94
+                                                else
Zbigniew Jędrzejewski-Szmek 62fe94
+                                                        i->gid_valid = true;
Zbigniew Jędrzejewski-Szmek 62fe94
+                                        }
Zbigniew Jędrzejewski-Szmek 62fe94
+                                        break;
Zbigniew Jędrzejewski-Szmek 62fe94
+                                default:
Zbigniew Jędrzejewski-Szmek 62fe94
+                                        break;
Zbigniew Jędrzejewski-Szmek 62fe94
+                                }
Zbigniew Jędrzejewski-Szmek 62fe94
+
Zbigniew Jędrzejewski-Szmek 62fe94
                                 i->name = name;
Zbigniew Jędrzejewski-Szmek 62fe94
                                 name = NULL;
Zbigniew Jędrzejewski-Szmek 62fe94
+
Zbigniew Jędrzejewski-Szmek 62fe94
                                 state = STATE_ALLOW_DENY;
Zbigniew Jędrzejewski-Szmek 62fe94
                         } else {
Zbigniew Jędrzejewski-Szmek 62fe94
                                 log_error("Unexpected token (14) in %s:%u.", path, line);