[libvirt] [PATCH 11/14] Add helper API for finding auth file path

Daniel P. Berrange berrange at redhat.com
Fri Mar 23 12:17:26 UTC 2012


On Thu, Mar 22, 2012 at 04:34:16PM +0800, Osier Yang wrote:
> On 2012年03月21日 01:33, Daniel P. Berrange wrote:
> >+int virAuthGetConfigFilePath(virConnectPtr conn,
> >+                             char **path)
> >+{
> >+    int ret = -1;
> >+    size_t i;
> >+    const char *authenv = getenv("LIBVIRT_AUTH_FILE");
> >+    char *userdir = NULL;
> >+
> >+    *path = NULL;
> >+
> >+    VIR_DEBUG("Determining auth config file path");
> >+
> >+    if (authenv) {
> >+        VIR_DEBUG("Using path from env '%s'", authenv);
> >+        if (!(*path = strdup(authenv)))
> >+            goto no_memory;
> >+        return 0;
> >+    }
> >+
> >+    for (i = 0 ; i<  conn->uri->paramsCount ; i++) {
> >+        if (STREQ_NULLABLE(conn->uri->params[i].name, "authfile")&&
> >+            conn->uri->params[i].value) {
> >+            VIR_DEBUG("Using path from URI '%s'",
> >+                      conn->uri->params[i].value);
> >+            if (!(*path = strdup(conn->uri->params[i].value)))
> >+                goto no_memory;
> >+            return 0;
> >+        }
> >+    }
> >+
> >+    if (!(userdir = virGetUserDirectory(geteuid())))
> >+        goto cleanup;
> >+
> >+    if (virAsprintf(path, "%s/.libvirt/auth.conf", userdir)<  0)
> >+        goto no_memory;
> >+
> >+    VIR_DEBUG("Checking for readability of '%s'", *path);
> >+    if (access(*path, R_OK) == 0)
> >+        goto done;
> >+
> >+    VIR_FREE(*path);
> >+
> >+    if (!(*path = strdup(SYSCONFDIR "/libvirt/auth.conf")))
> >+        goto no_memory;
> >+
> >+    VIR_DEBUG("Checking for readability of '%s'", *path);
> >+    if (access(*path, R_OK) == 0)
> >+        goto done;
> >+
> >+    VIR_FREE(*path);
> 
> *path will be NULL if the last choice of authfile (e.g.
> /etc/libvirt/auth.conf) is not readable, while the function
> will return 0.

Yes, that is correct behaviour. We only return '-1' upon some fatal
error. We return 0 if we successfully found a path, or if no path
exists. This is why we return the path in a out parameter, instead
of using the return value.


Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|




More information about the libvir-list mailing list