aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xsrc/99-emergency-addkey.sh40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/99-emergency-addkey.sh b/src/99-emergency-addkey.sh
new file mode 100755
index 0000000..d488798
--- /dev/null
+++ b/src/99-emergency-addkey.sh
@@ -0,0 +1,40 @@
+#!/bin/bash
+
+# what/why: re-establish gitolite admin access when admin key(s) lost
+# where: on server (NOT client!)
+
+# pre-req: shell access to the server (even with password is fine)
+# pre-work: - make yourself a new keypair on your workstation
+# - copy the pubkey and this script to the server
+
+# usage: $0 admin_name client_host_shortname pubkeyfile
+# notes: - admin_name should already have RW or RW+ access to the
+# gitolite-admin repo
+# - client_host_shortname is any simple word; see example below
+
+# WARNING: ABSOLUTELY NO ARGUMENT CHECKING DONE
+# WARNING: NEWER GITS ONLY ON SERVER SIDE (for now)
+
+# example: $0 sitaram laptop /tmp/sitaram.pub
+# result: a new keyfile named sitaram@laptop.pub would be added
+
+# ENDHELP
+
+[[ -z $1 ]] && { perl -pe "s(\\\$0)($0); last if /ENDHELP/" < $0; exit 1; }
+
+set -e
+
+cd
+REPO_BASE=$( perl -e 'do ".gitolite.rc"; print $REPO_BASE' )
+GL_ADMINDIR=$(perl -e 'do ".gitolite.rc"; print $GL_ADMINDIR')
+
+cd; cd $GL_ADMINDIR/keydir; pwd
+cp -v $3 $1@$2.pub
+
+cd; cd $REPO_BASE/gitolite-admin.git; pwd
+# XXX FIXME TODO -- fix this to work with older gits also
+GIT_WORK_TREE=$GL_ADMINDIR git add keydir
+GIT_WORK_TREE=$GL_ADMINDIR git commit -m "emergency add $1@$2.pub"
+
+cd $GL_ADMINDIR
+src/gl-compile-conf