MCPcopy Create free account
hub / github.com/catboost/catboost / GetUsername

Function GetUsername

util/system/user.cpp:14–57  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

12#endif
13
14TString GetUsername() {
15 for (const auto& var : {"LOGNAME", "USER", "LNAME", "USERNAME"}) {
16 TString val = GetEnv(var);
17 if (val) {
18 return val;
19 }
20 }
21
22 TTempBuf nameBuf;
23 for (;;) {
24#if defined(_win_)
25 DWORD len = (DWORD)Min(nameBuf.Size(), size_t(32767));
26 if (!GetUserNameA(nameBuf.Data(), &len)) {
27 DWORD err = GetLastError();
28 if ((err == ERROR_INSUFFICIENT_BUFFER) && (nameBuf.Size() <= 32767)) {
29 nameBuf = TTempBuf((size_t)len);
30 } else {
31 ythrow TSystemError(err) << " GetUserName failed";
32 }
33 } else {
34 return TString(nameBuf.Data(), (size_t)(len - 1));
35 }
36#elif defined(_bionic_)
37 const passwd* pwd = getpwuid(geteuid());
38
39 if (pwd) {
40 return TString(pwd->pw_name);
41 }
42
43 ythrow TSystemError() << TStringBuf(" getpwuid failed");
44#else
45 passwd pwd;
46 passwd* tmpPwd;
47 int err = getpwuid_r(geteuid(), &pwd, nameBuf.Data(), nameBuf.Size(), &tmpPwd);
48 if (err == 0 && tmpPwd) {
49 return TString(pwd.pw_name);
50 } else if (err == ERANGE) {
51 nameBuf = TTempBuf(nameBuf.Size() * 2);
52 } else {
53 ythrow TSystemError(err) << " getpwuid_r failed";
54 }
55#endif
56 }
57}

Callers 3

ImpersonateUserFunction · 0.85
StartProcessMethod · 0.85
Y_UNIT_TESTFunction · 0.85

Calls 5

TTempBufClass · 0.85
GetEnvFunction · 0.70
MinFunction · 0.50
SizeMethod · 0.45
DataMethod · 0.45

Tested by

no test coverage detected