VirtualBox

Changeset 41919 in vbox for trunk/src/VBox/Runtime/r3/posix


Ignore:
Timestamp:
Jun 27, 2012 8:06:27 AM (13 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
78783
Message:

Runtime/process: Add RTProcQueryUsername to query the username of the current process

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/r3/posix/process-posix.cpp

    r39801 r41919  
    3838#include <sys/wait.h>
    3939#include <signal.h>
     40#include <pwd.h>
    4041
    4142#include <iprt/process.h>
     
    146147}
    147148
     149
     150RTR3DECL(int) RTProcQueryUsername(RTPROCESS hProcess, char *pszUser, size_t cbUser,
     151                                  size_t *pcbUser)
     152{
     153    AssertPtrReturn(pszUser, VERR_INVALID_POINTER);
     154    AssertReturn(cbUser > 0, VERR_INVALID_PARAMETER);
     155    AssertPtrReturn(pcbUser, VERR_INVALID_POINTER);
     156
     157    if (hProcess != RTProcSelf())
     158        return VERR_NOT_SUPPORTED;
     159
     160    int32_t cbPwdMax = sysconf(_SC_GETPW_R_SIZE_MAX);
     161    if (cbPwdMax == -1)
     162        return RTErrConvertFromErrno(errno);
     163
     164    char *pbBuf = (char *)RTMemAllocZ(cbPwdMax);
     165    if (!pbBuf)
     166        return VERR_NO_MEMORY;
     167
     168    struct passwd Pwd, *pPwd;
     169    int rc = getpwuid_r(geteuid(), &Pwd, pbBuf, cbPwdMax, &pPwd);
     170    if (!rc)
     171    {
     172        size_t cbPwdUser = strlen(pPwd->pw_name) + 1;
     173
     174        *pcbUser = cbPwdUser;
     175
     176        if (cbPwdUser > cbUser)
     177            rc = VERR_BUFFER_OVERFLOW;
     178        else
     179        {
     180            memcpy(pszUser, pPwd->pw_name, cbPwdUser);
     181            rc = VINF_SUCCESS;
     182        }
     183    }
     184    else
     185        rc = RTErrConvertFromErrno(rc);
     186
     187    RTMemFree(pbBuf);
     188    return rc;
     189}
     190
     191
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette