]> xenbits.xensource.com Git - people/dariof/libvirt.git/commitdiff
util: add virGetUserDirectoryByUID
authorDan Walsh <dwalsh@redhat.com>
Tue, 30 Jul 2013 19:55:44 +0000 (15:55 -0400)
committerEric Blake <eblake@redhat.com>
Tue, 30 Jul 2013 21:25:59 +0000 (15:25 -0600)
This function is needed for virt-login-shell.  Also modify virGirUserDirectory
to use the new function, to simplify the code.

Signed-off-by: Eric Blake <eblake@redhat.com>
src/libvirt_private.syms
src/util/virutil.c
src/util/virutil.h

index d9615ea09a76432b46a3af24fe181c4189945b30..201b2cb5c2c23a827c6c34419513f9abda17313f 100644 (file)
@@ -2044,6 +2044,7 @@ virGetUnprivSGIOSysfsPath;
 virGetUserCacheDirectory;
 virGetUserConfigDirectory;
 virGetUserDirectory;
+virGetUserDirectoryByUID;
 virGetUserID;
 virGetUserName;
 virGetUserRuntimeDirectory;
index adcdb3c96063eb009a863c8c97aad6588b8b1666..3abcd53a47b68ff4938207872b4f31a42a17165e 100644 (file)
@@ -647,6 +647,14 @@ cleanup:
     return result;
 }
 
+
+char *
+virGetUserDirectory(void)
+{
+    return virGetUserDirectoryByUID(geteuid());
+}
+
+
 #ifdef HAVE_GETPWUID_R
 /* Look up fields from the user database for the given user.  On
  * error, set errno, report the error, and return -1.  */
@@ -750,13 +758,16 @@ static char *virGetGroupEnt(gid_t gid)
     return ret;
 }
 
-char *virGetUserDirectory(void)
+
+char *
+virGetUserDirectoryByUID(uid_t uid)
 {
     char *ret;
-    virGetUserEnt(geteuid(), NULL, NULL, &ret);
+    virGetUserEnt(uid, NULL, NULL, &ret);
     return ret;
 }
 
+
 static char *virGetXDGDirectory(const char *xdgenvname, const char *xdgdefdir)
 {
     const char *path = getenv(xdgenvname);
@@ -1092,8 +1103,11 @@ virGetWin32DirectoryRoot(char **path)
 
 
 char *
-virGetUserDirectory(void)
+virGetUserDirectoryByUID(uid_t uid ATTRIBUTE_UNUSED)
 {
+    /* Since Windows lacks setuid binaries, and since we already fake
+     * geteuid(), we can safely assume that this is only called when
+     * querying about the current user */
     const char *dir;
     char *ret;
 
@@ -1177,7 +1191,7 @@ virGetUserRuntimeDirectory(void)
 
 # else /* !HAVE_GETPWUID_R && !WIN32 */
 char *
-virGetUserDirectory(void)
+virGetUserDirectoryByUID(uid_t uid ATTRIBUTE_UNUSED)
 {
     virReportError(VIR_ERR_INTERNAL_ERROR,
                    "%s", _("virGetUserDirectory is not available"));
index 526c610877eac4f96f83be11b40a370302fd354e..4b06992346d853b02b49a200bb9f60e2832ddf66 100644 (file)
@@ -111,6 +111,7 @@ static inline int getgid (void) { return 0; }
 char *virGetHostname(void);
 
 char *virGetUserDirectory(void);
+char *virGetUserDirectoryByUID(uid_t uid);
 char *virGetUserConfigDirectory(void);
 char *virGetUserCacheDirectory(void);
 char *virGetUserRuntimeDirectory(void);