[libvirt] [PATCH v2 2/2] security: update user and group parsing in security_dac.c

Marcelo Cerri mhcerri at linux.vnet.ibm.com
Mon Oct 8 20:37:02 UTC 2012


The functions virGetUserID and virGetGroupID are now able to parse
user/group names and IDs in a similar way to coreutils' chown. So, user
and group parsing in security_dac can be simplified.
---
 src/security/security_dac.c | 45 ++++++++-------------------------------------
 1 file changed, 8 insertions(+), 37 deletions(-)

diff --git a/src/security/security_dac.c b/src/security/security_dac.c
index a427e9d..22edba2 100644
--- a/src/security/security_dac.c
+++ b/src/security/security_dac.c
@@ -69,8 +69,8 @@ static
 int parseIds(const char *label, uid_t *uidPtr, gid_t *gidPtr)
 {
     int rc = -1;
-    unsigned int theuid;
-    unsigned int thegid;
+    uid_t theuid;
+    gid_t thegid;
     char *tmp_label = NULL;
     char *sep = NULL;
     char *owner = NULL;
@@ -94,41 +94,12 @@ int parseIds(const char *label, uid_t *uidPtr, gid_t *gidPtr)
     owner = tmp_label;
     group = sep + 1;
 
-    /* Parse owner */
-    if (*owner == '+') {
-        if (virStrToLong_ui(++owner, NULL, 10, &theuid) < 0) {
-            virReportError(VIR_ERR_INVALID_ARG,
-                           _("Invalid uid \"%s\" in DAC label \"%s\""),
-                           owner, label);
-            goto cleanup;
-        }
-    } else {
-        if (virGetUserID(owner, &theuid) < 0 &&
-            virStrToLong_ui(owner, NULL, 10, &theuid) < 0) {
-            virReportError(VIR_ERR_INVALID_ARG,
-                           _("Invalid owner \"%s\" in DAC label \"%s\""),
-                           owner, label);
-            goto cleanup;
-        }
-    }
-
-    /* Parse group */
-    if (*group == '+') {
-        if (virStrToLong_ui(++group, NULL, 10, &thegid) < 0) {
-            virReportError(VIR_ERR_INVALID_ARG,
-                           _("Invalid gid \"%s\" in DAC label \"%s\""),
-                           group, label);
-            goto cleanup;
-        }
-    } else {
-        if (virGetGroupID(group, &thegid) < 0 &&
-            virStrToLong_ui(group, NULL, 10, &thegid) < 0) {
-            virReportError(VIR_ERR_INVALID_ARG,
-                           _("Invalid group \"%s\" in DAC label \"%s\""),
-                           group, label);
-            goto cleanup;
-        }
-    }
+    /* Parse owner and group, error message is defined by
+     * virGetUserID or virGetGroupID.
+     */
+    if (virGetUserID(owner, &theuid) < 0 ||
+        virGetGroupID(group, &thegid) < 0)
+        goto cleanup;
 
     if (uidPtr)
         *uidPtr = theuid;
-- 
1.7.12




More information about the libvir-list mailing list