tMerge pull request #8 from dyne/gitzone-shell-posix - gitzone - git-based zone management tool for static and dynamic domains HTML git clone https://git.parazyd.org/gitzone DIR Log DIR Files DIR Refs --- DIR commit 528aad32d27e4f25284a408a7dd57ddde11f02d8 DIR parent 1e61adb55d88c69feb3693d117788143904af813 HTML Author: Jaromil <jaromil@dyne.org> Date: Sun, 9 Jun 2019 10:56:31 +0200 Merge pull request #8 from dyne/gitzone-shell-posix Convert gitzone-shell to POSIX shell. Diffstat: M README.org | 4 +--- M bin/gitzone-shell | 70 ++++++++++++++++++------------- 2 files changed, 42 insertions(+), 32 deletions(-) --- DIR diff --git a/README.org b/README.org t@@ -17,9 +17,7 @@ server. Gitzone is written in Perl. Gitzone-shell is similar to git-shell but it restricts the user to the zones repository and provides some additional commands for dynamic DNS -updates & SSH key management. Gitzone-shell and the Gitzone-install -scripts are written in Zsh shell script. - +updates & SSH key management. #+LATEX: \pagebreak DIR diff --git a/bin/gitzone-shell b/bin/gitzone-shell t@@ -1,8 +1,8 @@ -#!/usr/bin/env zsh - +#!/bin/sh +# # gitzone-shell - restrictive shell for gitzone # -# Copyright (C) 2011,2013 Dyne.org Foundation +# Copyright (C) 2011,2019 Dyne.org Foundation # # This program is free software: you can redistribute it and/or modify it under # the terms of the GNU Affero General Public License as published by the Free t@@ -34,35 +34,47 @@ git=/usr/bin/git grep=/bin/grep error() { - echo "fatal: What do you think I am? A shell?" - exit 128 + echo "fatal: What do you think I am? A shell?" + exit 127 } if [ "$1" != "-c" ]; then error; fi cmd=$2 -if [[ "$cmd" == git-upload-pack* ]]; then - $git upload-pack $repo_dir/$repo -elif [[ "$cmd" == git-receive-pack* ]]; then - $git receive-pack $repo_dir/$repo -elif [[ "$cmd" == update-record* ]]; then - cd $repo_dir/$repo/.git - $gitzone $config update-record "$cmd" -elif [ -f $allow_key_mgmt_file ]; then - if [[ "$cmd" == list-keys ]]; then - cat .ssh/authorized_keys - elif [[ "$cmd" == add-key* ]]; then - key="${cmd:8}" - echo "$key" >> .ssh/authorized_keys && \ - echo "key added" - elif [[ "$cmd" == del-key* ]]; then - key="${cmd:8}" - $grep -v "$key" .ssh/authorized_keys > .ssh/authorized_keys-new && \ - mv .ssh/authorized_keys-new .ssh/authorized_keys && \ - echo "key deleted" - else - error - fi -else - error +case "$cmd" in +git-upload-pack*) + $git upload-pack "$repo_dir/$repo" + exit $? + ;; +git-receive-pack*) + $git receive-pack "$repo_dir/$repo" + exit $? + ;; +update-record*) + cd "$repo_dir/$repo/.git" || exit 1 + $gitzone "$config" update-record "$cmd" + exit $? + ;; +esac + +if [ -f "$allow_key_mgmt_file" ]; then + case "$cmd" in + list-keys) + cat .ssh/authorized_keys + exit $? + ;; + add-key*) + key="$(echo "$cmd" | cut -c9-)" + echo "$key" >> .ssh/authorized_keys && echo "key added" + exit $? + ;; + del-key*) + key="$(echo "$cmd" | cut -c9-)" + $grep -v "$key" .ssh/authorized_keys > .ssh/authorized_keys-new || exit 1 + mv .ssh/authorized_keys-new .ssh/authorized_keys && echo "key deleted" + exit $? + ;; + esac fi + +error