X-Git-Url: http://git.plutz.net/?p=cgilite;a=blobdiff_plain;f=index.cgi;fp=index.cgi;h=6359a0ae353e009e9dcbfc8425c52b1244bf6112;hp=0000000000000000000000000000000000000000;hb=d4c4b43f0c0a3632998892da7bad8a18e687b0e8;hpb=914662b3dbecfe34126991cfdb2a9049f2a9a29a diff --git a/index.cgi b/index.cgi new file mode 100755 index 0000000..6359a0a --- /dev/null +++ b/index.cgi @@ -0,0 +1,73 @@ +#!/bin/zsh + +# Copyright 2014, 2015 Paul Hänsch +# +# This file is part of shcgi. +# +# shcgi 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 Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# shcgi is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with shcgi. If not, see . + +export LC_ALL=C + +# this program is supposed to be symlinked into a http root directory +# we will use the http root as object storage (data directory) and call sub +# programs from the directory in which the real executable resides +# therefore we need to identify the code and data directories _EXEC and _DATA +call="$0" +real="$(readlink -f $call)" +_DATA="$(dirname "$call")" #storage directory +_EXEC="${real%/shcgi/index.cgi}" #execution directory + +# basic functions +die() { + echo "$@" >&2 + exit 1 +} + +debug() { #change to false to disable debugging + #true && echo "$*" >>debug + true && [ -n "$*" ] && echo -E "$*" >>/dev/stderr + true && [ -z "$*" ] && tee /dev/stderr +} + +data_dirs(){ + # create directories for object storage + + [ -d "$_DATA" -a -w "$_DATA" ] || die "storage directory must be writable" + for each in "$@"; do + [ ! -e "$_DATA/$each" ] && mkdir "$_DATA/$each" + [ -d "$_DATA/$each" -a -w "$_DATA/$each" ] || die "storage \"$_DATA/$each\" must be a writable directory" + done +} + +# create htaccess file +[ -f "$_DATA/.htaccess" ] || cat >"$_DATA/.htaccess" <