• Lubomir I. Ivanov (VMware)'s avatar
    os/user: obtain a user home path on Windows · 7a218942
    Lubomir I. Ivanov (VMware) authored
    newUserFromSid() is extended so that the retriaval of the user home
    path based on a user SID becomes possible.
    
    (1) The primary method it uses is to lookup the Windows registry for
    the following key:
      HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\[SID]
    
    If the key does not exist the user might not have logged in yet.
    If (1) fails it falls back to (2)
    
    (2) The second method the function uses is to look at the default home
    path for users (e.g. WINAPI's GetProfilesDirectory()) and append
    the username to that. The procedure is in the lines of:
      c:\Users + \ + <username>
    
    The function newUser() now requires the following arguments:
      uid, gid, dir, username, domain
    This is done to avoid multiple calls to usid.String() and
    usid.LookupAccount("") in the case of a newUserFromSid()
    call stack.
    
    The functions current() and newUserFromSid() both call newUser()
    supplying the arguments in question. The helpers
    lookupUsernameAndDomain() and findHomeDirInRegistry() are
    added.
    
    This commit also updates:
    - go/build/deps_test.go, so that the test now includes the
    "internal/syscall/windows/registry" import.
    - os/user/user_test.go, so that User.HomeDir is tested on Windows.
    
    GitHub-Last-Rev: 25423e2a3820121f4c42321e7a77a3977f409724
    GitHub-Pull-Request: golang/go#23822
    Change-Id: I6c3ad1c4ce3e7bc0d1add024951711f615b84ee5
    Reviewed-on: https://go-review.googlesource.com/93935Reviewed-by: 's avatarAlex Brainman <alex.brainman@gmail.com>
    Run-TryBot: Alex Brainman <alex.brainman@gmail.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    7a218942
Name
Last commit
Last update
..
archive Loading commit data...
bufio Loading commit data...
builtin Loading commit data...
bytes Loading commit data...
cmd Loading commit data...
compress Loading commit data...
container Loading commit data...
context Loading commit data...
crypto Loading commit data...
database/sql Loading commit data...
debug Loading commit data...
encoding Loading commit data...
errors Loading commit data...
expvar Loading commit data...
flag Loading commit data...
fmt Loading commit data...
go Loading commit data...
hash Loading commit data...
html Loading commit data...
image Loading commit data...
index/suffixarray Loading commit data...
internal Loading commit data...
io Loading commit data...
log Loading commit data...
math Loading commit data...
mime Loading commit data...
net Loading commit data...
os Loading commit data...
path Loading commit data...
plugin Loading commit data...
reflect Loading commit data...
regexp Loading commit data...
runtime Loading commit data...
sort Loading commit data...
strconv Loading commit data...
strings Loading commit data...
sync Loading commit data...
syscall Loading commit data...
testing Loading commit data...
text Loading commit data...
time Loading commit data...
unicode Loading commit data...
unsafe Loading commit data...
vendor/golang_org/x Loading commit data...
Make.dist Loading commit data...
all.bash Loading commit data...
all.bat Loading commit data...
all.rc Loading commit data...
androidtest.bash Loading commit data...
bootstrap.bash Loading commit data...
buildall.bash Loading commit data...
clean.bash Loading commit data...
clean.bat Loading commit data...
clean.rc Loading commit data...
cmp.bash Loading commit data...
iostest.bash Loading commit data...
make.bash Loading commit data...
make.bat Loading commit data...
make.rc Loading commit data...
naclmake.bash Loading commit data...
nacltest.bash Loading commit data...
race.bash Loading commit data...
race.bat Loading commit data...
run.bash Loading commit data...
run.bat Loading commit data...
run.rc Loading commit data...