提交 fbd76827 编写于 作者: D Dan Walsh 提交者: Eric Blake

util: add virGetUserDirectoryByUID

This function is needed for virt-login-shell.  Also modify virGirUserDirectory
to use the new function, to simplify the code.
Signed-off-by: NEric Blake <eblake@redhat.com>
上级 02033b63
...@@ -2044,6 +2044,7 @@ virGetUnprivSGIOSysfsPath; ...@@ -2044,6 +2044,7 @@ virGetUnprivSGIOSysfsPath;
virGetUserCacheDirectory; virGetUserCacheDirectory;
virGetUserConfigDirectory; virGetUserConfigDirectory;
virGetUserDirectory; virGetUserDirectory;
virGetUserDirectoryByUID;
virGetUserID; virGetUserID;
virGetUserName; virGetUserName;
virGetUserRuntimeDirectory; virGetUserRuntimeDirectory;
......
...@@ -647,6 +647,14 @@ cleanup: ...@@ -647,6 +647,14 @@ cleanup:
return result; return result;
} }
char *
virGetUserDirectory(void)
{
return virGetUserDirectoryByUID(geteuid());
}
#ifdef HAVE_GETPWUID_R #ifdef HAVE_GETPWUID_R
/* Look up fields from the user database for the given user. On /* Look up fields from the user database for the given user. On
* error, set errno, report the error, and return -1. */ * error, set errno, report the error, and return -1. */
...@@ -750,13 +758,16 @@ static char *virGetGroupEnt(gid_t gid) ...@@ -750,13 +758,16 @@ static char *virGetGroupEnt(gid_t gid)
return ret; return ret;
} }
char *virGetUserDirectory(void)
char *
virGetUserDirectoryByUID(uid_t uid)
{ {
char *ret; char *ret;
virGetUserEnt(geteuid(), NULL, NULL, &ret); virGetUserEnt(uid, NULL, NULL, &ret);
return ret; return ret;
} }
static char *virGetXDGDirectory(const char *xdgenvname, const char *xdgdefdir) static char *virGetXDGDirectory(const char *xdgenvname, const char *xdgdefdir)
{ {
const char *path = getenv(xdgenvname); const char *path = getenv(xdgenvname);
...@@ -1092,8 +1103,11 @@ virGetWin32DirectoryRoot(char **path) ...@@ -1092,8 +1103,11 @@ virGetWin32DirectoryRoot(char **path)
char * 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; const char *dir;
char *ret; char *ret;
...@@ -1177,7 +1191,7 @@ virGetUserRuntimeDirectory(void) ...@@ -1177,7 +1191,7 @@ virGetUserRuntimeDirectory(void)
# else /* !HAVE_GETPWUID_R && !WIN32 */ # else /* !HAVE_GETPWUID_R && !WIN32 */
char * char *
virGetUserDirectory(void) virGetUserDirectoryByUID(uid_t uid ATTRIBUTE_UNUSED)
{ {
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
"%s", _("virGetUserDirectory is not available")); "%s", _("virGetUserDirectory is not available"));
......
...@@ -111,6 +111,7 @@ static inline int getgid (void) { return 0; } ...@@ -111,6 +111,7 @@ static inline int getgid (void) { return 0; }
char *virGetHostname(void); char *virGetHostname(void);
char *virGetUserDirectory(void); char *virGetUserDirectory(void);
char *virGetUserDirectoryByUID(uid_t uid);
char *virGetUserConfigDirectory(void); char *virGetUserConfigDirectory(void);
char *virGetUserCacheDirectory(void); char *virGetUserCacheDirectory(void);
char *virGetUserRuntimeDirectory(void); char *virGetUserRuntimeDirectory(void);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册