-
Notifications
You must be signed in to change notification settings - Fork 17.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
os/user: add users and groups iterators #48015
Conversation
In order to add users and groups iterators for os/user, ReadSubKeyNames must be changed. Instead of returning a full slice of all subkey names, it can be changed to accept callback function, which receives sequentially iterated subkey names. As such, ReadSubKeyNames becomes an iterator and will use less memory for larger sets of data.
Plan9 operating system stores users and groups information in /adm/users file. This file is similar in strucuture to unix based /etc/passwd and /etc/group. Since readColonFile resides in lookup_unix.go file, extracting it makes it possible to reuse the functionality across all os targets that can can utilize the function.
This PR (HEAD: 70eed7b) has been imported to Gerrit for code review. Please visit https://go-review.googlesource.com/c/go/+/345592 to see it. Tip: You can toggle comments from me using the |
Message from Go Bot: Patch Set 1: Congratulations on opening your first change. Thank you for your contribution! Next steps: Most changes in the Go project go through a few rounds of revision. This can be During May-July and Nov-Jan the Go project is in a code freeze, during which Please don’t reply on this GitHub thread. Visit golang.org/cl/345592. |
Message from Mantas Jonaitis: Patch Set 1: (1 comment) Please don’t reply on this GitHub thread. Visit golang.org/cl/345592. |
Message from Damien Neil: Patch Set 1: Code-Review-2 (1 comment) Please don’t reply on this GitHub thread. Visit golang.org/cl/345592. |
Go standard library has os/user package which allows to lookup user or group records via either user/group name or id. This commit extends capabilities of os/user package by introducing iteration functionality for users and groups. Users and groups iteration functionality might be useful in cases where a full or partial list of all available users/groups is required in an application.
70eed7b
to
e3a4b4f
Compare
This PR (HEAD: e3a4b4f) has been imported to Gerrit for code review. Please visit https://go-review.googlesource.com/c/go/+/345592 to see it. Tip: You can toggle comments from me using the |
The proposal was declined; closing. |
Fixes #47907
Go standard library has os/user package which allows to lookup user
or group records via either user/group name or id. This pull request
extends capabilities of os/user package by introducing iteration
functionality for users and groups.
Users and groups iteration functionality might be useful in cases where
a full or partial list of all available users/groups is required in an
application.
On unix, iteration functionality relies
on two internal implementations: one that does not use cgo and parses
contents of /etc/passwd and /etc/group files for users and groups
respectively, and another one that does use cgo and utilizes POSIX
compliant libc library routines getpwent and getgrent for users and
groups respectively. On windows,
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
registry key is iterated for SID values, each SID value represents either
a user or a group.
Tested on Debian GNU/Linux 10 (buster), macOS 11.5.1, freebsd 13.0,
plan9 fourth edition, windows 10 version 21H1.
Comparison of go iterators vs getent (with time -v) with ~17000 entries of users and ~4000 entries of groups:
getent passwd:
go users/groups iterators passwd:
getent group:
go users/groups iterators group: