summaryrefslogtreecommitdiff
path: root/user
diff options
context:
space:
mode:
authorwrowe <wrowe@13f79535-47bb-0310-9956-ffa450edef68>2001-07-27 07:11:07 +0000
committerwrowe <wrowe@13f79535-47bb-0310-9956-ffa450edef68>2001-07-27 07:11:07 +0000
commit6760b40147e0c0d304082a9ce102d945cac91c9d (patch)
treec66845c51a3ea15b7d81aa3e0e84f030ea27df52 /user
parenta92afea5e51681dc36b6518d9539e32ea6713eeb (diff)
downloadlibapr-6760b40147e0c0d304082a9ce102d945cac91c9d.tar.gz
Here's an implementation, dunno if it's _the_ implementation we are
looking for. git-svn-id: http://svn.apache.org/repos/asf/apr/apr/trunk@62043 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'user')
-rw-r--r--user/win32/userinfo.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/user/win32/userinfo.c b/user/win32/userinfo.c
index 8636d174a..66f9abb4a 100644
--- a/user/win32/userinfo.c
+++ b/user/win32/userinfo.c
@@ -189,6 +189,39 @@ APR_DECLARE(apr_status_t) apr_get_home_directory(char **dirname, const char *use
return APR_SUCCESS;
}
+APR_DECLARE(apr_status_t) apr_current_userid(apr_uid_t *uid,
+ apr_gid_t *gid,
+ apr_pool_t *p)
+{
+ HANDLE threadtok;
+ DWORD needed;
+ TOKEN_USER *usr;
+ TOKEN_PRIMARY_GROUP *grp;
+
+ if(!OpenProcessToken(GetCurrentProcess(), STANDARD_RIGHTS_READ | READ_CONTROL | TOKEN_QUERY, &threadtok)) {
+ return apr_get_os_error();
+ }
+
+ *uid = NULL;
+ if (!GetTokenInformation(threadtok, TokenUser, NULL, 0, &needed)
+ && (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
+ && (usr = apr_palloc(p, needed))
+ && GetTokenInformation(threadtok, TokenUser, usr, needed, &needed))
+ *uid = usr->User.Sid;
+ else
+ return apr_get_os_error();
+
+ if (!GetTokenInformation(threadtok, TokenPrimaryGroup, NULL, 0, &needed)
+ && (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
+ && (grp = apr_palloc(p, needed))
+ && GetTokenInformation(threadtok, TokenPrimaryGroup, grp, needed, &needed))
+ *gid = grp->PrimaryGroup;
+ else
+ return apr_get_os_error();
+
+ return APR_SUCCESS;
+}
+
APR_DECLARE(apr_status_t) apr_get_userid(apr_uid_t *uid, apr_gid_t *gid,
const char *username, apr_pool_t *p)
{