diff options
author | Berni Moses | 2020-04-01 15:57:43 +0000 |
---|---|---|
committer | GitHub | 2020-04-01 15:57:43 +0000 |
commit | 38a6904a948661802d2c744e0c2b9759e11fbd70 (patch) | |
tree | bef3b7d1f753e142372b3b4474391e19c8de03fe | |
parent | 8c75dc9df518579cab48a6ded803bf8d493a3cab (diff) |
Support remote passwd providers like SSSD.
-rw-r--r-- | src/utils.nim | 28 |
1 files changed, 12 insertions, 16 deletions
diff --git a/src/utils.nim b/src/utils.nim index 8ca68d4..c329b68 100644 --- a/src/utils.nim +++ b/src/utils.nim @@ -215,22 +215,18 @@ proc setgroups*(size: csize, groups: ptr cint): cint {.importc, header: "<grp.h>".} proc getUser(uid: int): User = - while true: - var pw = getpwent() - if pw == nil: - endpwent() - raise newException(CatchableError, "") - if pw.pw_uid.int == uid: - var groups: array[100, cint] - var ngroups: cint = 100 - if getgrouplist(pw.pw_name, pw.pw_gid, addr(groups[0]), ngroups) < 0: - raise newException(CatchableError, "") - else: - let groupsSeq = groups[0 .. ngroups - 1].map(x => x.int) - let res = ($pw.pw_name, pw.pw_uid.int, pw.pw_gid.int, groupsSeq, - $pw.pw_dir, $pw.pw_shell) - endpwent() - return res + var pw = getpwuid(Uid(uid)) + if pw == nil: + raise newException(CatchableError, "") + var groups: array[100, cint] + var ngroups: cint = 100 + if getgrouplist(pw.pw_name, pw.pw_gid, addr(groups[0]), ngroups) < 0: + raise newException(CatchableError, "") + else: + let groupsSeq = groups[0 .. ngroups - 1].map(x => x.int) + let res = ($pw.pw_name, pw.pw_uid.int, pw.pw_gid.int, groupsSeq, + $pw.pw_dir, $pw.pw_shell) + return res let currentUser* = getUser(getuid().int) |