From 38a6904a948661802d2c744e0c2b9759e11fbd70 Mon Sep 17 00:00:00 2001 From: Berni Moses Date: Wed, 1 Apr 2020 17:57:43 +0200 Subject: Support remote passwd providers like SSSD. --- src/utils.nim | 28 ++++++++++++---------------- 1 file 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: "".} 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) -- cgit v1.2.3-70-g09d2