tools: Use POSIX compatible arguments for find
[gnupg.git] / tools / addgnupghome
index 20436b6..718b222 100755 (executable)
@@ -1,5 +1,5 @@
-# !/bin/sh                                                  -*- sh -*-
-#           Add a new .gnupg home directory for a list of users
+#!/bin/sh
+# Add a new .gnupg home directory for a list of users         -*- sh -*-
 #
 # Copyright 2004 Free Software Foundation, Inc.
 #
@@ -14,6 +14,7 @@
 PGM=addgnupghome
 any_error=0
 
+
 error () {
   echo "$PGM: $*" >&2
   any_error=1
@@ -26,9 +27,9 @@ info () {
 # Do it for one user
 one_user () {
     user="$1"
-    home=$(awk -F: -v n="$user" '$1 == n {print $6}' /etc/passwd )
+    home=$(${cat_passwd} | awk -F: -v n="$user" '$1 == n {print $6}')
     if [ -z "$home" ]; then
-        if awk -F: -v n="$user" '$1 == n {exit 1}' /etc/passwd; then
+        if ${cat_passwd} | awk -F: -v n="$user" '$1 == n {exit 1}'; then
             error "no such user \`$user'"
         else
             error "no home directory for user \`$user'"
@@ -48,11 +49,22 @@ one_user () {
         error "error creating \`$home/.gnupg'"
         return
     fi
+
     if ! chown $user "$home/.gnupg" ; then
         error "error changing ownership of \`$home/.gnupg'"
         return
     fi
 
+    group=$(id -g "$user")
+    [ -z "$group" ] && group="0"
+
+    if [ "$group" -gt 0 ]; then
+        if ! chgrp $group "$home/.gnupg" ; then
+            error "error changing group of \`$home/.gnupg'"
+            return
+        fi
+    fi
+
     if ! cd "$home/.gnupg" ; then
         error "error cd-ing to \`$home/.gnupg'"
         return
@@ -63,24 +75,39 @@ one_user () {
         else
             cp /etc/skel/.gnupg/$f $f
         fi
-        chown $user $f
+        if ! chown $user $f ; then
+            error "error changing ownership of \`$f'"
+            return
+        fi
+        if [ "$group" -gt 0 ]; then
+            if ! chgrp $group "$f" ; then
+                error "error changing group of \`$f'"
+                return
+            fi
+        fi
     done
 
-
 }
 
-if [ -z "$1" ]; then 
+if [ -z "$1" ]; then
     echo "usage: $PGM userids"
     exit 1
 fi
 
+# Check whether we can use getent
+if getent --help </dev/null >/dev/null 2>&1 ; then
+    cat_passwd='getent passwd'
+else
+    cat_passwd='cat /etc/passwd'
+    info "please note that only users from /etc/passwd are checked"
+fi
+
 if [ ! -d /etc/skel/.gnupg ]; then
     error "skeleton directory \`/etc/skel/.gnupg' does not exist"
     exit 1
 fi
 cd "/etc/skel/.gnupg" || (error "error cd-ing to \`/etc/skel/.gnupg'"; exit 1)
-filelist=$(find . \( -type f -or -type d \) -not -name '*~' -not -name . -print)
-
+filelist=$(find . \( -type f -o -type d \) '!' -name '*~' '!' -name . -print)
 
 
 if ! umask 0077 ; then