You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
102 lines
3.6 KiB
102 lines
3.6 KiB
#!/bin/sh |
|
## |
|
## git-apache.sh -- Git integration for Apache |
|
## |
|
|
|
# base configuration |
|
vardir="@l_prefix@/var/git-apache" |
|
htpasswd="@l_prefix@/sbin/htpasswd" |
|
git="@l_prefix@/bin/git" |
|
|
|
# run-time sanity check |
|
if [ ".`id -u`" != .0 ]; then |
|
echo "$0: ERROR: command requires root privileges" 1>&2 |
|
exit 1 |
|
fi |
|
|
|
# command-line handling |
|
usage () { |
|
echo "USAGE: $0 create <repo-name>" 1>&2 |
|
echo "USAGE: $0 destroy <repo-name>" 1>&2 |
|
echo "USAGE: $0 passwd <repo-name> <user-name> [<user-password>] [committer]" 1>&2 |
|
exit 1 |
|
} |
|
if [ $# -lt 2 ]; then |
|
usage |
|
fi |
|
cmd="$1"; shift |
|
repo="$1"; shift |
|
|
|
# dispatch according to command... |
|
case "$cmd" in |
|
create ) |
|
# create repository |
|
if [ -d "$vardir/dat/$repo" ]; then |
|
echo "$0: ERROR: repository \"$repo\" already existing -- destroy first" 1>&2 |
|
exit 1 |
|
fi |
|
echo "++ creating repository \"$repo\"" |
|
mkdir "$vardir/dat/$repo.git" |
|
$git init --quiet --bare "$vardir/dat/$repo" |
|
$git config -f "$vardir/dat/$repo/config" http.getanyfile true |
|
$git config -f "$vardir/dat/$repo/config" http.uploadpack true |
|
$git config -f "$vardir/dat/$repo/config" http.receivepack true |
|
echo -n "Git Repository <$repo>" >"$vardir/dat/$repo/description" |
|
chown -R "@l_nusr@:@l_ngrp@" "$vardir/dat/$repo" |
|
echo -n "" >"$vardir/etc/$repo.pwd" |
|
chown "@l_nusr@:@l_ngrp@" "$vardir/etc/$repo.pwd" |
|
echo -n "committers:" >"$vardir/etc/$repo.grp" |
|
chown "@l_nusr@:@l_ngrp@" "$vardir/etc/$repo.grp" |
|
( echo "<LocationMatch \"^/git/$repo/.*\">" |
|
echo " AuthName \"Git Repository <$repo> (read access)\"" |
|
echo " AuthType Basic" |
|
echo " AuthBasicProvider file" |
|
echo " AuthUserFile $vardir/etc/$repo.pwd" |
|
echo " AuthGroupFile $vardir/etc/$repo.grp" |
|
echo " Require valid-user" |
|
echo "</LocationMatch>" |
|
echo "<LocationMatch \"^/git/[^/]+/.*git-receive-pack$\">" |
|
echo " AuthName \"Git Repository <$repo> (write access)\"" |
|
echo " AuthType Basic" |
|
echo " AuthBasicProvider file" |
|
echo " AuthUserFile $vardir/etc/$repo.pwd" |
|
echo " AuthGroupFile $vardir/etc/$repo.grp" |
|
echo " Require group committers" |
|
echo "</LocationMatch>" |
|
) >"$vardir/etc/$repo.conf" |
|
chown "@l_nusr@:@l_ngrp@" "$vardir/etc/$repo.conf" |
|
;; |
|
destroy ) |
|
# destroy repository |
|
if [ ! -d "$vardir/dat/$repo" ]; then |
|
echo "$0: ERROR: repository \"$repo\" not existing -- create first" 1>&2 |
|
exit 1 |
|
fi |
|
echo "++ destroying repository \"$repo\"" |
|
rm -rf "$vardir/dat/$repo" |
|
rm -f "$vardir/etc/$repo.pwd" |
|
rm -f "$vardir/etc/$repo.grp" |
|
;; |
|
passwd ) |
|
# configure access control of repository |
|
if [ $# -lt 1 ]; then |
|
usage |
|
fi |
|
username="$1"; shift |
|
if [ ! -d "$vardir/dat/$repo" ]; then |
|
echo "$0: ERROR: repository \"$repo\" not existing -- create first" 1>&2 |
|
exit 1 |
|
fi |
|
echo "++ setting password access for \"$repo\"" |
|
if [ $# -ge 1 ]; then |
|
password="$1"; shift |
|
$htpasswd -b "$vardir/etc/$repo.pwd" "$username" "$password" |
|
else |
|
$htpasswd "$vardir/etc/$repo.pwd" "$username" |
|
fi |
|
if [ $# -eq 1 -a ".$1" = ".committer" ]; then |
|
echo -n " $username" >>"$vardir/etc/$repo.grp" |
|
fi |
|
;; |
|
esac |
|
|
|
|