• 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
security_windows.go 2.65 KB