diff options
author | Werner Koch <wk@gnupg.org> | 2004-01-29 21:20:10 +0100 |
---|---|---|
committer | Werner Koch <wk@gnupg.org> | 2004-01-29 21:20:10 +0100 |
commit | a7840b96439352fe14b62c202725837e788285f0 (patch) | |
tree | 057cb679f018fb3b0c7368716302d0443c88cdc7 | |
parent | (reset_notify): Release the application context and (diff) | |
download | gnupg2-a7840b96439352fe14b62c202725837e788285f0.tar.xz gnupg2-a7840b96439352fe14b62c202725837e788285f0.zip |
New.
-rw-r--r-- | tools/ChangeLog | 4 | ||||
-rw-r--r-- | tools/Makefile.am | 2 | ||||
-rwxr-xr-x | tools/addgnupghome | 95 |
3 files changed, 100 insertions, 1 deletions
diff --git a/tools/ChangeLog b/tools/ChangeLog index a382d05a5..215317967 100644 --- a/tools/ChangeLog +++ b/tools/ChangeLog @@ -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. diff --git a/tools/Makefile.am b/tools/Makefile.am index 09ba633f4..c24e4c7a3 100644 --- a/tools/Makefile.am +++ b/tools/Makefile.am @@ -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 index 000000000..20436b637 --- /dev/null +++ b/tools/addgnupghome @@ -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 |