[libvirt] [PATCH 3/7] Convert callers to use typesafe APIs for setting identity attrs

Daniel P. Berrange berrange at redhat.com
Wed Sep 10 14:20:56 UTC 2014


Update virNetServerClientCreateIdentity and virIdentityGetSystem
to use the new typesafe APIs for setting identity attributes

Signed-off-by: Daniel P. Berrange <berrange at redhat.com>
---
 src/rpc/virnetserverclient.c | 115 ++++++++++---------------------------------
 src/util/viridentity.c       |  79 ++++++++---------------------
 2 files changed, 46 insertions(+), 148 deletions(-)

diff --git a/src/rpc/virnetserverclient.c b/src/rpc/virnetserverclient.c
index 3493ef5..c6ef84c 100644
--- a/src/rpc/virnetserverclient.c
+++ b/src/rpc/virnetserverclient.c
@@ -653,21 +653,14 @@ int virNetServerClientGetUNIXIdentity(virNetServerClientPtr client,
 static virIdentityPtr
 virNetServerClientCreateIdentity(virNetServerClientPtr client)
 {
-    char *processid = NULL;
-    char *processtime = NULL;
     char *username = NULL;
-    char *userid = NULL;
     char *groupname = NULL;
-    char *groupid = NULL;
-#if WITH_SASL
-    char *saslname = NULL;
-#endif
-#if WITH_GNUTLS
-    char *x509dname = NULL;
-#endif
     char *seccontext = NULL;
     virIdentityPtr ret = NULL;
 
+    if (!(ret = virIdentityNew()))
+        goto error;
+
     if (client->sock && virNetSocketIsLocal(client->sock)) {
         gid_t gid;
         uid_t uid;
@@ -676,116 +669,60 @@ virNetServerClientCreateIdentity(virNetServerClientPtr client)
         if (virNetSocketGetUNIXIdentity(client->sock,
                                         &uid, &gid, &pid,
                                         &timestamp) < 0)
-            goto cleanup;
+            goto error;
 
         if (!(username = virGetUserName(uid)))
-            goto cleanup;
-        if (virAsprintf(&userid, "%d", (int)uid) < 0)
-            goto cleanup;
+            goto error;
+        if (virIdentitySetUNIXUserName(ret, username) < 0)
+            goto error;
+        if (virIdentitySetUNIXUserID(ret, uid) < 0)
+            goto error;
+
         if (!(groupname = virGetGroupName(gid)))
-            goto cleanup;
-        if (virAsprintf(&groupid, "%d", (int)gid) < 0)
-            goto cleanup;
-        if (virAsprintf(&processid, "%llu",
-                        (unsigned long long)pid) < 0)
-            goto cleanup;
-        if (virAsprintf(&processtime, "%llu",
-                        timestamp) < 0)
-            goto cleanup;
+            goto error;
+        if (virIdentitySetUNIXGroupName(ret, groupname) < 0)
+            goto error;
+        if (virIdentitySetUNIXGroupID(ret, gid) < 0)
+            goto error;
+
+        if (virIdentitySetUNIXProcessID(ret, pid) < 0)
+            goto error;
+        if (virIdentitySetUNIXProcessTime(ret, timestamp) < 0)
+            goto error;
     }
 
 #if WITH_SASL
     if (client->sasl) {
         const char *identity = virNetSASLSessionGetIdentity(client->sasl);
-        if (VIR_STRDUP(saslname, identity) < 0)
-            goto cleanup;
+        if (virIdentitySetSASLUserName(ret, identity) < 0)
+            goto error;
     }
 #endif
 
 #if WITH_GNUTLS
     if (client->tls) {
         const char *identity = virNetTLSSessionGetX509DName(client->tls);
-        if (VIR_STRDUP(x509dname, identity) < 0)
-            goto cleanup;
+        if (virIdentitySetX509DName(ret, identity) < 0)
+            goto error;
     }
 #endif
 
     if (client->sock &&
         virNetSocketGetSELinuxContext(client->sock, &seccontext) < 0)
-        goto cleanup;
-
-    if (!(ret = virIdentityNew()))
-        goto cleanup;
-
-    if (username &&
-        virIdentitySetAttr(ret,
-                           VIR_IDENTITY_ATTR_UNIX_USER_NAME,
-                           username) < 0)
-        goto error;
-    if (userid &&
-        virIdentitySetAttr(ret,
-                           VIR_IDENTITY_ATTR_UNIX_USER_ID,
-                           userid) < 0)
-        goto error;
-    if (groupname &&
-        virIdentitySetAttr(ret,
-                           VIR_IDENTITY_ATTR_UNIX_GROUP_NAME,
-                           groupname) < 0)
-        goto error;
-    if (groupid &&
-        virIdentitySetAttr(ret,
-                           VIR_IDENTITY_ATTR_UNIX_GROUP_ID,
-                           groupid) < 0)
-        goto error;
-    if (processid &&
-        virIdentitySetAttr(ret,
-                           VIR_IDENTITY_ATTR_UNIX_PROCESS_ID,
-                           processid) < 0)
-        goto error;
-    if (processtime &&
-        virIdentitySetAttr(ret,
-                           VIR_IDENTITY_ATTR_UNIX_PROCESS_TIME,
-                           processtime) < 0)
         goto error;
-#if WITH_SASL
-    if (saslname &&
-        virIdentitySetAttr(ret,
-                           VIR_IDENTITY_ATTR_SASL_USER_NAME,
-                           saslname) < 0)
-        goto error;
-#endif
-#if WITH_GNUTLS
-    if (x509dname &&
-        virIdentitySetAttr(ret,
-                           VIR_IDENTITY_ATTR_X509_DISTINGUISHED_NAME,
-                           x509dname) < 0)
-        goto error;
-#endif
     if (seccontext &&
-        virIdentitySetAttr(ret,
-                           VIR_IDENTITY_ATTR_SELINUX_CONTEXT,
-                           seccontext) < 0)
+        virIdentitySetSELinuxContext(ret, seccontext) < 0)
         goto error;
 
  cleanup:
     VIR_FREE(username);
-    VIR_FREE(userid);
     VIR_FREE(groupname);
-    VIR_FREE(groupid);
-    VIR_FREE(processid);
-    VIR_FREE(processtime);
     VIR_FREE(seccontext);
-#if WITH_SASL
-    VIR_FREE(saslname);
-#endif
-#if WITH_GNUTLS
-    VIR_FREE(x509dname);
-#endif
     return ret;
 
  error:
     virObjectUnref(ret);
-    ret = NULL;
+    ret = 0;
     goto cleanup;
 }
 
diff --git a/src/util/viridentity.c b/src/util/viridentity.c
index 68ccab9..6f3baee 100644
--- a/src/util/viridentity.c
+++ b/src/util/viridentity.c
@@ -135,38 +135,38 @@ int virIdentitySetCurrent(virIdentityPtr ident)
 virIdentityPtr virIdentityGetSystem(void)
 {
     char *username = NULL;
-    char *userid = NULL;
     char *groupname = NULL;
-    char *groupid = NULL;
-    char *seccontext = NULL;
+    unsigned long long startTime;
     virIdentityPtr ret = NULL;
 #if WITH_SELINUX
     security_context_t con;
 #endif
-    char *processid = NULL;
-    unsigned long long timestamp;
-    char *processtime = NULL;
 
-    if (virAsprintf(&processid, "%llu",
-                    (unsigned long long)getpid()) < 0)
-        goto cleanup;
+    if (!(ret = virIdentityNew()))
+        goto error;
 
-    if (virProcessGetStartTime(getpid(), &timestamp) < 0)
-        goto cleanup;
+    if (virIdentitySetUNIXProcessID(ret, getpid()) < 0)
+        goto error;
 
-    if (timestamp != 0 &&
-        virAsprintf(&processtime, "%llu", timestamp) < 0)
-        goto cleanup;
+    if (virProcessGetStartTime(getpid(), &startTime) < 0)
+        goto error;
+    if (startTime != 0 &&
+        virIdentitySetUNIXProcessTime(ret, startTime) < 0)
+        goto error;
 
     if (!(username = virGetUserName(geteuid())))
         goto cleanup;
-    if (virAsprintf(&userid, "%d", (int)geteuid()) < 0)
-        goto cleanup;
+    if (virIdentitySetUNIXUserName(ret, username) < 0)
+        goto error;
+    if (virIdentitySetUNIXUserID(ret, getuid()) < 0)
+        goto error;
 
     if (!(groupname = virGetGroupName(getegid())))
         goto cleanup;
-    if (virAsprintf(&groupid, "%d", (int)getegid()) < 0)
-        goto cleanup;
+    if (virIdentitySetUNIXGroupName(ret, groupname) < 0)
+        goto error;
+    if (virIdentitySetUNIXGroupID(ret, getgid()) < 0)
+        goto error;
 
 #if WITH_SELINUX
     if (is_selinux_enabled() > 0) {
@@ -175,56 +175,17 @@ virIdentityPtr virIdentityGetSystem(void)
                                  _("Unable to lookup SELinux process context"));
             goto cleanup;
         }
-        if (VIR_STRDUP(seccontext, con) < 0) {
+        if (virIdentitySetSELinuxContext(ret, con) < 0) {
             freecon(con);
-            goto cleanup;
+            goto error;
         }
         freecon(con);
     }
 #endif
 
-    if (!(ret = virIdentityNew()))
-        goto cleanup;
-
-    if (virIdentitySetAttr(ret,
-                           VIR_IDENTITY_ATTR_UNIX_USER_NAME,
-                           username) < 0)
-        goto error;
-    if (virIdentitySetAttr(ret,
-                           VIR_IDENTITY_ATTR_UNIX_USER_ID,
-                           userid) < 0)
-        goto error;
-    if (virIdentitySetAttr(ret,
-                           VIR_IDENTITY_ATTR_UNIX_GROUP_NAME,
-                           groupname) < 0)
-        goto error;
-    if (virIdentitySetAttr(ret,
-                           VIR_IDENTITY_ATTR_UNIX_GROUP_ID,
-                           groupid) < 0)
-        goto error;
-    if (seccontext &&
-        virIdentitySetAttr(ret,
-                           VIR_IDENTITY_ATTR_SELINUX_CONTEXT,
-                           seccontext) < 0)
-        goto error;
-    if (virIdentitySetAttr(ret,
-                           VIR_IDENTITY_ATTR_UNIX_PROCESS_ID,
-                           processid) < 0)
-        goto error;
-    if (processtime &&
-        virIdentitySetAttr(ret,
-                           VIR_IDENTITY_ATTR_UNIX_PROCESS_TIME,
-                           processtime) < 0)
-        goto error;
-
  cleanup:
     VIR_FREE(username);
-    VIR_FREE(userid);
     VIR_FREE(groupname);
-    VIR_FREE(groupid);
-    VIR_FREE(seccontext);
-    VIR_FREE(processid);
-    VIR_FREE(processtime);
     return ret;
 
  error:
-- 
1.9.3




More information about the libvir-list mailing list