2008-09-13 14:19:22 -07:00
|
|
|
#ifdef HAVE_CONFIG_H
|
|
|
|
# include "config.h"
|
|
|
|
#endif /* HAVE_CONFIG_H */
|
|
|
|
|
2008-10-09 14:56:31 -07:00
|
|
|
#include <windows.h>
|
|
|
|
#include <security.h>
|
|
|
|
|
|
|
|
#include "Evil.h"
|
2008-09-13 14:19:22 -07:00
|
|
|
#include "pwd.h"
|
|
|
|
|
|
|
|
|
2008-09-14 23:56:14 -07:00
|
|
|
static struct passwd pw;
|
2008-09-13 14:19:22 -07:00
|
|
|
|
|
|
|
struct passwd *
|
|
|
|
getpwuid (uid_t uid)
|
|
|
|
{
|
|
|
|
static char user_name[PATH_MAX];
|
2008-10-09 14:56:31 -07:00
|
|
|
TCHAR name[PATH_MAX];
|
|
|
|
ULONG length;
|
|
|
|
BOOLEAN res;
|
|
|
|
#ifdef UNICODE
|
|
|
|
char *a_name;
|
|
|
|
# endif /* UNICODE */
|
2008-09-13 14:19:22 -07:00
|
|
|
|
|
|
|
length = PATH_MAX;
|
2009-02-22 11:20:23 -08:00
|
|
|
#ifdef _WIN32_WINNT
|
|
|
|
res = GetUserNameEx(NameDisplay, name, &length);
|
|
|
|
#else
|
|
|
|
res = GetUserNameEx(NameWindowsCeLocal, name, &length);
|
|
|
|
#endif
|
2008-10-09 14:56:31 -07:00
|
|
|
#ifdef UNICODE
|
|
|
|
if (res)
|
|
|
|
{
|
|
|
|
a_name = evil_wchar_to_char(name);
|
|
|
|
if (a_name)
|
|
|
|
{
|
2010-02-27 23:57:03 -08:00
|
|
|
int l;
|
2008-10-09 14:56:31 -07:00
|
|
|
|
2010-02-27 23:57:03 -08:00
|
|
|
l = strlen(a_name);
|
|
|
|
if (l >= PATH_MAX)
|
|
|
|
l = PATH_MAX;
|
|
|
|
memcpy(user_name, a_name, l);
|
|
|
|
user_name[l] = '\0';
|
2008-10-09 14:56:31 -07:00
|
|
|
free(a_name);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
res = 0;
|
|
|
|
}
|
|
|
|
#endif /* UNICODE */
|
2008-09-13 14:19:22 -07:00
|
|
|
pw.pw_name = (res ? user_name : NULL);
|
|
|
|
pw.pw_passwd = NULL;
|
|
|
|
pw.pw_uid = uid;
|
|
|
|
pw.pw_gid = 0;
|
|
|
|
pw.pw_change = 0;
|
|
|
|
pw.pw_class = NULL;
|
|
|
|
pw.pw_gecos = (res ? user_name : NULL);
|
|
|
|
pw.pw_dir = (char *)evil_homedir_get();
|
|
|
|
pw.pw_shell = getenv("SHELL");
|
2010-08-21 06:52:25 -07:00
|
|
|
if (!pw.pw_shell)
|
2008-09-13 14:19:22 -07:00
|
|
|
pw.pw_shell = "sh";
|
|
|
|
pw.pw_expire = 0;
|
|
|
|
pw.pw_fields = 0;
|
|
|
|
|
|
|
|
return &pw;
|
|
|
|
}
|