diff options
author | Jameson Graef Rollins <jrollins@finestructure.net> | 2009-04-06 22:40:08 -0700 |
---|---|---|
committer | Jameson Graef Rollins <jrollins@finestructure.net> | 2009-04-06 22:40:08 -0700 |
commit | c514677a32ef4a3264898a389902ac973ebc3507 (patch) | |
tree | 9ec3e4bd115ec6eec30706a069a8314bc6f11d44 | |
parent | 802c21de824309c1e704f172b12bf46bf5d86e7c (diff) |
Add two new compatibility functions:
- list_user to list all users on the system
- get_homedir to return the path to a users home directory
These functions should provide compatibility on linux, FreeBSD and
Darwin systems.
-rw-r--r-- | src/share/common | 19 | ||||
-rw-r--r-- | src/share/ma/update_users | 2 |
2 files changed, 19 insertions, 2 deletions
diff --git a/src/share/common b/src/share/common index ac0b5d6..f954bb9 100644 --- a/src/share/common +++ b/src/share/common @@ -390,7 +390,7 @@ translate_ssh_variables() { path="$2" # get the user's home directory - userHome=$(getent passwd "$uname" | cut -d: -f6) + userHome=$(get_homedir "$uname") # translate '%u' to user name path=${path/\%u/"$uname"} @@ -458,6 +458,23 @@ check_key_file_permissions() { fi } +# return a list of all users on the system +list_users() { + if type getent &>/dev/null ; then + # for linux and FreeBSD systems + getent passwd | cut -d: -f1 + elif type dscl &>/dev/null ; then + # for Darwin systems + dscl localhost -list /Search/Users + fi +} + +# return the path to the home directory of a user +get_homedir() { + local uname=${1:-`whoami`} + eval "echo ~${uname}" +} + ### CONVERSION UTILITIES # output the ssh key for a given key ID diff --git a/src/share/ma/update_users b/src/share/ma/update_users index 3a5c006..c5c74cf 100644 --- a/src/share/ma/update_users +++ b/src/share/ma/update_users @@ -24,7 +24,7 @@ if [ "$1" ] ; then unames="$@" else # or just look at all users if none specified - unames=$(getent passwd | cut -d: -f1) + unames=$(list_users) fi # set mode |