New.
authorWerner Koch <wk@gnupg.org>
Thu, 29 Jan 2004 20:20:10 +0000 (20:20 +0000)
committerWerner Koch <wk@gnupg.org>
Thu, 29 Jan 2004 20:20:10 +0000 (20:20 +0000)
tools/ChangeLog
tools/Makefile.am
tools/addgnupghome [new file with mode: 0755]

index a382d05..2153179 100644 (file)
@@ -1,3 +1,7 @@
+2004-01-29  Werner Koch  <wk@gnupg.org>
+
+       * addgnupghome: New.
+
 2004-01-29  Marcus Brinkmann  <marcus@g10code.de>
 
        * gpgconf-list.c: File removed.
index 09ba633..c24e4c7 100644 (file)
@@ -17,7 +17,7 @@
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
 
-EXTRA_DIST = Manifest watchgnupg.c
+EXTRA_DIST = Manifest watchgnupg.c addgnupghome
 
 localedir = $(datadir)/locale
 INCLUDES = -I../intl -DLOCALEDIR=\"$(localedir)\"
diff --git a/tools/addgnupghome b/tools/addgnupghome
new file mode 100755 (executable)
index 0000000..20436b6
--- /dev/null
@@ -0,0 +1,95 @@
+# !/bin/sh                                                  -*- sh -*-
+#           Add a new .gnupg home directory for a list of users
+#
+# Copyright 2004 Free Software Foundation, Inc.
+#
+# This file is free software; as a special exception the author gives
+# unlimited permission to copy and/or distribute it, with or without
+# modifications, as long as this notice is preserved.
+#
+# This file is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+PGM=addgnupghome
+any_error=0
+
+error () {
+  echo "$PGM: $*" >&2
+  any_error=1
+}
+
+info () {
+  echo "$PGM: $*" >&2
+}
+
+# Do it for one user
+one_user () {
+    user="$1"
+    home=$(awk -F: -v n="$user" '$1 == n {print $6}' /etc/passwd )
+    if [ -z "$home" ]; then
+        if awk -F: -v n="$user" '$1 == n {exit 1}' /etc/passwd; then
+            error "no such user \`$user'"
+        else
+            error "no home directory for user \`$user'"
+        fi
+        return
+    fi
+    if [ ! -d "$home" ]; then
+        error "home directory \`$home' of user \`$user' does not exist"
+        return
+    fi
+    if [ -d "$home/.gnupg" ]; then
+        info "skipping user \`$user': \`.gnupg' already exists"
+        return
+    fi
+    info "creating home directory \`$home/.gnupg' for \`$user'"
+    if ! mkdir "$home/.gnupg" ; then
+        error "error creating \`$home/.gnupg'"
+        return
+    fi
+    if ! chown $user "$home/.gnupg" ; then
+        error "error changing ownership of \`$home/.gnupg'"
+        return
+    fi
+
+    if ! cd "$home/.gnupg" ; then
+        error "error cd-ing to \`$home/.gnupg'"
+        return
+    fi
+    for f in $filelist; do
+        if [ -d /etc/skel/.gnupg/$f ]; then
+            mkdir $f
+        else
+            cp /etc/skel/.gnupg/$f $f
+        fi
+        chown $user $f
+    done
+
+
+}
+
+if [ -z "$1" ]; then 
+    echo "usage: $PGM userids"
+    exit 1
+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)
+
+
+
+if ! umask 0077 ; then
+    error "error setting umask"
+    exit 1
+fi
+
+for name in $*; do
+    one_user $name
+done
+
+exit $any_error