/* By Peter 'Luna' Runestig <peter@runestig.com> 1996, 99
 */
#include <windows.h>
#include <lmaccess.h>
#include <lmapibuf.h>
#include <stdio.h>

int GetUserInfo(LPWSTR wCompName, LPWSTR wUserName);
int UnicodeToOEM(LPWSTR InString, char *OutString, int OutStringSize);
int OEMToUnicode(char *InString, LPWSTR OutString, int OutStringSize);

char HomeDir[100] = "", ProfilePath[100] = "";

int main(int argc, char *argv[], char *envp[])
{
	unsigned short wCompName[128], wDomainName[128], wUserName[128], *wPDCName;
	char *CompName = NULL;
	char *DomainName = "BOLL.KL.SE";
//	char *CompName = "\\\\BOLLNT01";
//	char *DomainName = NULL;
	char *UserName = "LunaUser";

	OEMToUnicode(UserName, wUserName, sizeof(wUserName));

	if (DomainName) {
		OEMToUnicode(DomainName, wDomainName, sizeof(wDomainName));
		if (NetGetDCName(NULL, wDomainName, (LPBYTE *)&wPDCName)) {
			printf("Cannot find PDC!\n");
			return 2;
		} 
		GetUserInfo(wPDCName, wUserName);
		NetApiBufferFree(wPDCName);
	}
	else if (CompName) {
		OEMToUnicode(CompName, wCompName, sizeof(wCompName));
		GetUserInfo(wCompName, wUserName);
	}

	if (*HomeDir && *ProfilePath)
		printf("User:\t\t%s\nHome Dir:\t%s\nProfile Path:\t%s\n", UserName, HomeDir, ProfilePath);
	return 0;
}



int GetUserInfo(LPWSTR wCompName, LPWSTR wUserName)
{
  int err;
  LPUSER_INFO_3 UserInfo;
/*typedef struct _USER_INFO_3 {
    LPWSTR    usri3_name;
    LPWSTR    usri3_password;
    DWORD     usri3_password_age;
    DWORD     usri3_priv;
    LPWSTR    usri3_home_dir;
    LPWSTR    usri3_comment;
    DWORD     usri3_flags;
    LPWSTR    usri3_script_path;
    DWORD     usri3_auth_flags;
    LPWSTR    usri3_full_name;
    LPWSTR    usri3_usr_comment;
    LPWSTR    usri3_parms;
    LPWSTR    usri3_workstations;
    DWORD     usri3_last_logon;
    DWORD     usri3_last_logoff;
    DWORD     usri3_acct_expires;
    DWORD     usri3_max_storage;
    DWORD     usri3_units_per_week;
    PBYTE     usri3_logon_hours;
    DWORD     usri3_bad_pw_count;
    DWORD     usri3_num_logons;
    LPWSTR    usri3_logon_server;
    DWORD     usri3_country_code;
    DWORD     usri3_code_page;
    DWORD     usri3_user_id;
    DWORD     usri3_primary_group_id;
    LPWSTR    usri3_profile;
    LPWSTR    usri3_home_dir_drive;
    DWORD     usri3_password_expired;
}USER_INFO_3, *PUSER_INFO_3, *LPUSER_INFO_3;*/
  
	err = NetUserGetInfo(wCompName, wUserName, 3, (LPBYTE *)&UserInfo);
	if (!err) {
		UnicodeToOEM(UserInfo->usri3_home_dir, HomeDir, sizeof(HomeDir));
		UnicodeToOEM(UserInfo->usri3_profile, ProfilePath, sizeof(ProfilePath));
		NetApiBufferFree(UserInfo);
	}
	return err;
}

int UnicodeToOEM(LPWSTR InString, char *OutString, int OutStringSize)
{
  return WideCharToMultiByte(CP_OEMCP, 0, InString, -1, OutString, OutStringSize, NULL, NULL);
}

int OEMToUnicode(char *InString, LPWSTR OutString, int OutStringSize)
{
  return MultiByteToWideChar(CP_OEMCP, 0, InString, -1, OutString, OutStringSize);
}