[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