]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
Fix polkit0 authentication
authorJim Fehlig <jfehlig@suse.com>
Wed, 15 Feb 2012 17:01:50 +0000 (10:01 -0700)
committerJim Fehlig <jfehlig@suse.com>
Thu, 16 Feb 2012 04:47:53 +0000 (21:47 -0700)
Commit 7033c5f2 introduced some bugs in polkit0 authentication.

Fix libvirtd segfault in remoteDispatchAuthPolkit().

Fix polkit authentication bypass when caller UID = 0.

daemon/remote.c

index ed27053d8e5bbe5543527df58293b4dcced45da8..74a5f16f2294f16a77cca0378de5e967ca8ddf37 100644 (file)
@@ -2052,16 +2052,16 @@ remoteDispatchAuthList(virNetServerPtr server ATTRIBUTE_UNUSED,
         } else if (callerUid == 0) {
             char *ident;
             if (virAsprintf(&ident, "pid:%lld,uid:%d",
-                            (long long) callerPid, callerUid) >= 0) {
-                VIR_INFO("Bypass polkit auth for privileged client %s",
-                         ident);
-                if (virNetServerClientSetIdentity(client, ident) < 0)
-                    virResetLastError();
-                else
-                    auth = VIR_NET_SERVER_SERVICE_AUTH_NONE;
-                VIR_FREE(ident);
+                            (long long) callerPid, callerUid) < 0) {
+                virReportOOMError();
+                goto cleanup;
             }
-            rv = -1;
+            VIR_INFO("Bypass polkit auth for privileged client %s", ident);
+            if (virNetServerClientSetIdentity(client, ident) < 0)
+                virResetLastError();
+            else
+                auth = VIR_NET_SERVER_SERVICE_AUTH_NONE;
+            VIR_FREE(ident);
         }
     }
 
@@ -2593,8 +2593,6 @@ remoteDispatchAuthPolkit(virNetServerPtr server,
     struct daemonClientPrivate *priv =
         virNetServerClientGetPrivateData(client);
 
-    memset(ident, 0, sizeof ident);
-
     virMutexLock(&priv->lock);
 
     action = virNetServerClientGetReadonly(client) ?