summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJameson Graef Rollins <jrollins@finestructure.net>2009-04-06 22:40:08 -0700
committerJameson Graef Rollins <jrollins@finestructure.net>2009-04-06 22:40:08 -0700
commitc514677a32ef4a3264898a389902ac973ebc3507 (patch)
tree9ec3e4bd115ec6eec30706a069a8314bc6f11d44
parent802c21de824309c1e704f172b12bf46bf5d86e7c (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/common19
-rw-r--r--src/share/ma/update_users2
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