OSSP CVS Repository

ossp - Check-in [45]
Not logged in
[Honeypot]  [Browse]  [Home]  [Login]  [Reports
[Search]  [Ticket]  [Timeline
  [Patchset]  [Tagging/Branching

Check-in Number: 45
Date: 2000-Jun-17 16:30:50 (local)
2000-Jun-17 14:30:50 (UTC)
User:rse
Branch:
Comment: Import of OSSP Shiela
Tickets:
Inspections:
Files:
ossp-pkg/shiela/shiela-install.sh      added-> 1.1.1.1

ossp-pkg/shiela/shiela-install.sh -> 1.1.1.1

*** /dev/null    Mon May  6 17:04:45 2024
--- -    Mon May  6 17:04:46 2024
***************
*** 0 ****
--- 1,619 ----
+ #!@SH@
+ ##
+ ##  Shiela - CVS Access Control and Logging Facility
+ ##  Copyright (c) 2000 Ralf S. Engelschall <rse@engelschall.com>
+ ##
+ ##  This file is part of Shiela, an access control and logging
+ ##  facility for Concurrent Versions System (CVS) repositories
+ ##  which can be found at http://www.ossp.org/pkg/shiela/.
+ ##
+ ##  This program is free software; you can redistribute it and/or
+ ##  modify it under the terms of the GNU General Public  License 
+ ##  as published by the Free Software Foundation; either version 
+ ##  2.0 of the License, or (at your option) any later version.
+ ##
+ ##  This program 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
+ ##  General Public License for more details.
+ ##
+ ##  You should have received a copy of the GNU General Public License 
+ ##  along with this file; if not, write to the Free Software
+ ##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ ##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
+ ##
+ ##  shiela-install: Shiela repository install program (syntax: Bourne-Shell)
+ ##
+ 
+ version="0.9.0"
+ 
+ prefix="@prefix@"
+ bindir="@bindir@"
+ 
+ if [ ".$TMPDIR" != . ]; then
+     tmpdir=$TMPDIR
+ elif [ ".$TEMPDIR" != . ]; then
+     tmpdir=$TEMPDIR
+ else
+     tmpdir=/tmp
+ fi
+ tmpfile="$tmpdir/shiela-install.$$.tmp"
+ 
+ #   determine terminal bold sequence
+ term_bold='' 
+ term_norm=''
+ case $TERM in
+     #   for the most important terminal types we directly know the sequences
+     xterm|xterm*|vt220|vt220*)
+         term_bold=`awk 'BEGIN { printf("%c%c%c%c", 27, 91, 49, 109); }' </dev/null 2>/dev/null`
+         term_norm=`awk 'BEGIN { printf("%c%c%c", 27, 91, 109); }' </dev/null 2>/dev/null`
+         ;;
+     vt100|vt100*)
+         term_bold=`awk 'BEGIN { printf("%c%c%c%c%c%c", 27, 91, 49, 109, 0, 0); }' </dev/null 2>/dev/null`
+         term_norm=`awk 'BEGIN { printf("%c%c%c%c%c", 27, 91, 109, 0, 0); }' </dev/null 2>/dev/null`
+         ;;
+     #   for all others, we try to use a possibly existing `tput' or `tcout' utility
+     * )
+         paths=`echo $PATH | sed -e 's/:/ /g'`
+         for tool in tput tcout; do
+             for dir in $paths; do
+                 if [ -r "$dir/$tool" ]; then
+                     for seq in bold md smso; do # 'smso' is last
+                         bold="`$dir/$tool $seq 2>/dev/null`"
+                         if [ ".$bold" != . ]; then
+                             term_bold="$bold"
+                             break
+                         fi
+                     done
+                     if [ ".$term_bold" != . ]; then
+                         for seq in sgr0 me rmso reset; do # 'reset' is last
+                             norm="`$dir/$tool $seq 2>/dev/null`"
+                             if [ ".$norm" != . ]; then
+                                 term_norm="$norm"
+                                 break
+                             fi
+                         done
+                     fi
+                     break
+                 fi
+             done
+             if [ ".$term_bold" != . -a ".$term_norm" != . ]; then
+                 break;
+             fi
+         done
+         ;;
+ esac
+ 
+ echo "This is ${term_bold}Shiela Setup${term_norm}, Version ${term_bold}${version}${term_norm}"
+ echo "Copyright (c) 2000 Ralf S. Engelschall <rse@engelschall.com>"
+ echo ""
+ 
+ echo "${term_bold}PARAMETER DETERMINATION${term_norm}"
+ cat <<EOT
+ 
+ This utility helps you to initially setup Shiela for a particular CVS
+ repository. It asks you a few questions in order to establish an initial
+ Shiela configuration. This can be adjusted later without problems. Only
+ the questions marked with (U) ask for details which are actually used
+ immediately and so have to be correctly entered already now. All other
+ questions ask just for informational (I) details which do not harm if
+ not immediately correct.
+ 
+ EOT
+ 
+ for arg; do
+     eval `echo $arg | sed -e 's/^\([^=]*\)=\(.*\)$/V_\1="\2"/`
+ done
+ 
+ query () {
+     vartype=$1
+     varname=$2
+     echo $varname | awk '{ printf("%-16s", $0); }'
+     eval "text=\"($vartype) [\$V_$varname]: \""
+     echo dummy | awk '{ printf("%s", TEXT); }' TEXT="$text"
+     if [ ".$V_batch" = .yes ]; then
+         echo ""
+     else
+         read answer
+         if [ ".$answer" != . ]; then
+             eval "V_${varname}=\"\$answer\""
+         fi
+     fi
+ }
+ 
+ domainname=''
+ hostname="`(uname -n) 2>/dev/null |\
+            awk '{ printf("%s", $1); }'`"
+ if [ ".$hostname" = . ]; then
+     hostname="`(hostname) 2>/dev/null |\
+                awk '{ printf("%s", $1); }'`"
+     if [ ".$hostname" = . ]; then
+         hostname='unknown'
+     fi
+ fi
+ case $hostname in
+     *.* )
+         domainname="`echo $hostname | cut -d. -f2-`"
+         hostname="`echo $hostname | cut -d. -f1`"
+         ;;
+ esac
+ if [ ".$domainname" = . ]; then
+     if [ -f /etc/resolv.conf ]; then
+         domainname="`egrep '^[         ]*domain' /etc/resolv.conf | head -1 |\
+                      sed -e 's/.*domain//' \
+                          -e 's/^[      ]*//' -e 's/^ *//' -e 's/^      *//' \
+                          -e 's/^\.//' |\
+                      awk '{ printf("%s", $1); }'`"
+         if [ ".$domainname" = . ]; then
+             domainname="`egrep '^[     ]*search' /etc/resolv.conf | head -1 |\
+                          sed -e 's/.*search//' \
+                              -e 's/^[  ]*//' -e 's/^ *//' -e 's/^      *//' \
+                              -e 's/ .*//' -e 's/       .*//' \
+                              -e 's/^\.//' |\
+                          awk '{ printf("%s", $1); }'`"
+         fi
+     fi
+ fi
+ if [ ".$V_host_name" = . ]; then
+     V_host_name=$hostname
+ fi
+ query I host_name
+ if [ ".$V_domain_name" = . ]; then
+     V_domain_name=$domainname
+ fi
+ query U domain_name
+ 
+ if [ ".$V_user_name" = . ]; then
+     V_user_name="$LOGNAME"
+     if [ ".$V_user_name" = . ]; then
+         V_user_name="$USER"
+         if [ ".$V_user_name" = . ]; then
+             V_user_name="`(whoami) 2>/dev/null |\
+                           awk '{ printf("%s", $1); }'`"
+             if [ ".$V_user_name" = . ]; then
+                 V_user_name="`(who am i) 2>/dev/null |\
+                               awk '{ printf("%s", $1); }'`"
+                 if [ ".$V_user_name" = . ]; then
+                     V_user_name='unknown'
+                 fi
+             fi
+         fi
+     fi
+ fi
+ query U user_name
+ 
+ if [ ".$V_user_realname" = . ]; then
+     V_user_realname=`(cat /etc/passwd; (ypcat passwd) 2>/dev/null) |\
+                      egrep "^$V_user_name:" 2>/dev/null | \
+                      sed -e 's/[^:]*:[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'`
+ fi
+ query I user_realname
+ 
+ if [ ".$V_user_email" = . ]; then
+     V_user_email="${V_user_name}@${V_domain_name}"
+ fi
+ query U user_email
+ 
+ if [ ".$V_project_tag" = . ]; then
+     V_project_tag="`echo ${V_user_name} |\
+                     tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`"
+ fi
+ query I project_tag
+ 
+ if [ ".$V_project_name" = . ]; then
+     V_project_name="${V_user_realname}'s CVS Test Project"
+ fi
+ query I project_name
+ 
+ if [ ".$V_project_home" = . ]; then
+     V_project_home="http://${V_host_name}.${V_domain_name}/~${V_user_name}/"
+ fi
+ query I project_home
+ 
+ if [ ".$V_project_contact" = . ]; then
+     V_project_contact=${V_user_email}
+ fi
+ query I project_contact
+ 
+ if [ ".$V_repos_tag" = . ]; then
+     V_repos_tag="CVS-`echo ${V_user_name} |\
+                  tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`"
+ fi
+ query I repos_tag
+ 
+ if [ ".$V_repos_name" = . ]; then
+     V_repos_name="${V_user_realname}'s CVS Test Repository"
+ fi
+ query I repos_name
+ 
+ if [ ".$V_repos_contact" = . ]; then
+     V_repos_contact=${V_project_contact}
+ fi
+ query I repos_contact
+ 
+ if [ ".$V_repos_home" = . ]; then
+     V_repos_home=${V_project_home}
+ fi
+ query I repos_home
+ 
+ if [ ".$V_repos_host" = . ]; then
+     V_repos_host="${V_host_name}.${V_domain_name}"
+ fi
+ query U repos_host
+ 
+ if [ ".$V_repos_path" = . ]; then
+     V_repos_path="${CVSROOT-/tmp}"
+ fi
+ query U repos_path
+ if [ ! -d "$V_repos_path/CVSROOT" ]; then
+     echo "shiela-install:Error: \`$V_repos_path' does not look like a CVS repository" 1>&2
+     exit 1
+ fi
+ 
+ if [ ".$V_repos_history" = . ]; then
+     V_repos_history="CVSROOT/shiela.log"
+ fi
+ query U repos_history
+ 
+ #   check whether the test command supports the -x option
+ if [ -x /bin/sh ] 2>/dev/null; then
+     minusx="-x"
+ else
+     minusx="-r"
+ fi
+ #   split path string
+ paths="`echo $PATH |\
+         sed -e 's/^:/.:/' \
+             -e 's/::/:.:/g' \
+             -e 's/:$/:./' \
+             -e 's/:/ /g'`"
+ 
+ if [ ".$V_tool_perl" = . ]; then
+     V_tool_perl="perl"
+     rm -f $tmpfile
+     touch $tmpfile
+     c=0
+     found=0
+     for dir in $paths; do
+         dir=`echo $dir | sed -e 's;/*$;;'`
+         for perl in perl5 perl miniperl; do
+              if [ $minusx "$dir/$perl" ] && [ ! -d "$dir/$perl" ]; then
+                  perl="$dir/$perl"
+                  version=`$perl -v | grep version |\
+                           sed -e 's/.* version //' -e 's/ built.*//' -e 's/ with.*//'`
+                  versionnum="`echo $version | sed -e 's/\.//g' -e 's/_//g'`"
+                  versionnum=`expr $versionnum - $c`
+                  echo "$versionnum $perl" >>$tmpfile
+                  found=1
+              fi
+         done
+         c=`expr $c + 1`
+     done
+     if [ $found = 1 ]; then
+         V_tool_perl="`cat $tmpfile | sort -u | tail -1 | cut '-d ' -f2`"
+     fi
+     rm -f $tmpfile
+ fi
+ query U tool_perl
+ 
+ if [ ".$V_tool_cvs" = . ]; then
+     V_tool_cvs="cvs"
+     for path in $paths; do
+         path=`echo $path | sed -e 's;/*$;;'`
+         if [ $minusx "$path/cvs" ] && [ ! -d "$path/cvs" ]; then
+             V_tool_cvs="$path/cvs"
+             break
+         fi
+     done
+ fi
+ query U tool_cvs
+ 
+ if [ ".$V_tool_sendmail" = . ]; then
+     V_tool_sendmail="sendmail"
+     for path in $paths; do
+         path=`echo $path | sed -e 's;/*$;;'`
+         if [ $minusx "$path/sendmail" ] && [ ! -d "$path/sendmail" ]; then
+             V_tool_sendmail="$path/sendmail"
+             break
+         fi
+     done
+ fi
+ query U tool_sendmail
+ 
+ CVS_VERSION=`$V_tool_cvs --version |\
+              grep "Concurrent Versions System (CVS)" |\
+              sed -e 's;^.*(CVS) ;;' -e 's; .*$;;'`
+ if [ ".`$V_tool_cvs --version | grep OSSP`" != . ]; then
+     CVS_VENDOR=OSSP
+ else
+     CVS_VENDOR=OpenAvenue
+ fi
+ case $CVS_VERSION in
+    1.10.[789]* | 1.10.1[0123456789]* | 1.11.* ) 
+        ;;
+    * ) 
+        echo "ERROR: CVS has to be at least version 1.10.7"
+        exit 1 
+        ;;
+ esac
+ case $CVS_VENDOR in
+     OSSP ) 
+        ;;
+     * ) 
+        echo "WARNING: You are using a stock CVS version from $CVS_VENDOR!"
+        echo "         This means that not all Shiela functionality is available".
+        echo "         for you. Please consider upgrading to the OSSP CVS version.".
+        echo ""
+        ;;
+ esac
+ 
+ if [ ".$V_tool_shiela" = . ]; then
+     V_tool_shiela="$bindir/shiela"
+     for path in $paths; do
+         path=`echo $path | sed -e 's;/*$;;'`
+         if [ $minusx "$path/shiela" ] && [ ! -d "$path/shiela" ]; then
+             V_tool_shiela="$path/shiela"
+             break
+         fi
+     done
+ fi
+ query U tool_shiela
+ 
+ if [ ".$V_shiela_local" = . ]; then
+     V_shiela_local=yes
+ fi
+ query U shiela_local
+ 
+ cat >$tmpdir/shiela.cfg <<EOT
+ ##
+ ##  Shiela - CVS Access Control and Logging Facility
+ ##  Copyright (c) 2000 Ralf S. Engelschall <rse@engelschall.com>
+ ##
+ ##  This file is part of Shiela, an access control and logging
+ ##  facility for Concurrent Versions System (CVS) repositories 
+ ##  which can be found at http://www.ossp.org/pkg/shiela/.
+ ##
+ ##  This program is free software; you can redistribute it and/or
+ ##  modify it under the terms of the GNU General Public  License 
+ ##  as published by the Free Software Foundation; either version 
+ ##  2.0 of the License, or (at your option) any later version.
+ ##
+ ##  This program 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
+ ##  General Public License for more details.
+ ##
+ ##  You should have received a copy of the GNU General Public License 
+ ##  along with this file; if not, write to the Free Software
+ ##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ ##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
+ ##
+ ##  shiela.cfg: Shiela configuration (syntax: Shiela C-style)
+ ##
+ 
+ Project {
+     Tag     ${V_project_tag};
+     Name    "${V_project_name}";
+     Contact ${V_project_contact};
+     Home    ${V_project_home};
+     Users {
+         User ${V_user_name} "${V_user_realname}" ${V_user_email};
+     };
+     Groups {
+         Group users "Repository Users" { ${V_user_name} };
+     };
+ };
+ 
+ Environment {
+     CVS      ${V_tool_cvs};
+     Sendmail ${V_tool_sendmail};
+ };
+ 
+ Repository {
+     Tag     ${V_repos_tag};
+     Name    "${V_repos_name}"; 
+     Contact ${V_repos_contact};
+     Home    ${V_repos_home};
+     Host    ${V_repos_host};
+     Path    ${V_repos_path};
+     History ${V_repos_history};
+     Modules {
+         Module CVSROOT "CVS Administrative Files" {
+             Acl * *:users;
+             Log passwd none;
+             Log * mail:${V_user_email};
+         };
+     };
+ };
+ 
+ Logging {
+     Reports {
+         Report mail {
+             Content title rule header files log summary details;
+             Details diff:mime;
+         };
+     };
+ };
+ 
+ EOT
+ 
+ cat >$tmpdir/shiela.msg <<EOT
+ 
+ PR:
+ Submitted by:
+ Reviewed by:
+ Approved by:
+ Obtained from:
+ CVS: ----------------------------------------------------------------------
+ CVS: PR:            Fill this in if a problem report is affected
+ CVS: Submitted by:  Fill this in if someone else sent you the change
+ CVS: Reviewed by:   Fill this in if someone else reviewed your modification
+ CVS: Approved by:   Fill this in if you needed approval for this commit
+ CVS: Obtained from: Fill this in if the change is from third party software
+ CVS: ----------------------------------------------------------------------
+ EOT
+ 
+ echo ""
+ echo "${term_bold}SHIELA CONFIGURATION${term_norm}"
+ cat <<EOT
+ 
+ Initial "shiela.cfg" and "shiela.msg" files were generated for you. 
+ Before Shiela is installed and activated with these configuration files, 
+ you have the chance to adjust them in your editor.
+ 
+ EOT
+ text="Edit \"shiela.cfg\" now with \"${EDITOR-vi}\" [y/N]: "
+ echo dummy | awk '{ printf("%s", TEXT); }' TEXT="$text"
+ if [ ".$V_batch" = .yes ]; then
+     echo ""
+ else
+     read answer
+     if [ ".$answer" = .y ]; then
+         cd $tmpdir && ${EDITOR-vi} shiela.cfg
+     fi
+ fi
+ text="Edit \"shiela.msg\" now with \"${EDITOR-vi}\" [y/N]: "
+ echo dummy | awk '{ printf("%s", TEXT); }' TEXT="$text"
+ if [ ".$V_batch" = .yes ]; then
+     echo ""
+ else
+     read answer
+     if [ ".$answer" = .y ]; then
+         cd $tmpdir && ${EDITOR-vi} shiela.msg
+     fi
+ fi
+ echo ""
+ 
+ echo "${term_bold}CVSROOT MODIFICATION${term_norm}"
+ cat <<EOT
+ 
+ Ok, we are now prepared to modify ${V_repos_path}/CVSROOT/. We will
+ first checkout CVSROOT and modify it. Then you have a last chance to
+ stop processing before we finally commit the modifications.
+ 
+ EOT
+ 
+ run () {
+     echo "\$ $*" 1>&2
+     eval $* || exit 1
+ }
+ 
+ cvs_file () {
+     op=$1
+     file=$2;
+     name=`echo $file | sed -e 's;\.;_;g'`
+     if [ ".$op" = .tst ]; then
+         if [ -f $file ]; then
+             eval "cvs_file_add_${name}=no"
+         else
+             eval "cvs_file_add_${name}=yes"
+         fi
+     elif [ ".$op" = .add ]; then
+         eval "add=\$cvs_file_add_${name}"
+         if [ ".$add" = .yes ]; then
+             run $V_tool_cvs -q add $file
+         fi
+     fi
+ }
+ 
+ run rm -rf CVSROOT
+ run cvs -Q -q -d${V_repos_path} co CVSROOT 
+ run cd CVSROOT
+ 
+ if [ ".$V_shiela_local" = .yes ]; then
+     cvs_file tst shiela
+     run "cp $V_tool_shiela ."
+     run chmod 755 shiela 
+     cvs_file add shiela
+     V_tool_shiela="\$CVSROOT/CVSROOT/shiela"
+ fi
+ 
+ cvs_file tst shiela.cfg
+ run cp $tmpdir/shiela.cfg .
+ run chmod 644 shiela.cfg
+ cvs_file add shiela.cfg
+ 
+ cvs_file tst shiela.msg
+ run cp $tmpdir/shiela.msg .
+ run chmod 644 shiela.msg
+ cvs_file add shiela.msg
+ 
+ cvs_file tst checkoutlist
+ run "echo 'shiela.cfg' >>checkoutlist"
+ run "echo 'shiela' >>checkoutlist"
+ run "echo 'shiela.msg' >>checkoutlist"
+ cvs_file add checkoutlist
+ 
+ cvs_file tst rcsinfo
+ run "(echo ''; echo 'ALL \$CVSROOT/CVSROOT/shiela.msg'; echo '') >>rcsinfo"
+ cvs_file add rcsinfo
+ 
+ cvs_file tst taginfo
+ run "(echo ''; echo 'ALL $V_tool_shiela --hook=taginfo'; echo '') >>taginfo"
+ cvs_file add taginfo
+ 
+ if [ ".$CVS_VENDOR" = .OSSP ]; then
+     cvs_file tst importinfo
+     run "(echo ''; echo 'ALL $V_tool_shiela --hook=importinfo'; echo '') >>importinfo"
+     cvs_file add importinfo
+ 
+     cvs_file tst admininfo
+     run "(echo ''; echo 'ALL $V_tool_shiela --hook=admininfo'; echo '') >>admininfo"
+     cvs_file add admininfo
+ fi
+ 
+ cvs_file tst commitinfo
+ run "(echo ''; echo 'ALL $V_tool_shiela --hook=commitinfo'; echo '') >>commitinfo"
+ cvs_file add commitinfo
+ 
+ cvs_file tst verifymsg
+ run "(echo ''; echo 'DEFAULT $V_tool_shiela --hook=verifymsg'; echo '') >>verifymsg"
+ cvs_file add verifymsg
+ 
+ if [ ".$CVS_VENDOR" = .OSSP ]; then
+     flags="sVvto"
+ else
+     flags="sVv"
+ fi
+ cvs_file tst loginfo
+ run "(echo ''; echo 'ALL $V_tool_shiela --hook=loginfo %{${flags}}'; echo '') >>loginfo"
+ cvs_file add loginfo
+ 
+ run $V_tool_cvs update
+ 
+ echo ""
+ echo "${term_bold}The above modifications were made to CVSROOT.${term_norm}"
+ text="${term_bold}Are you sure to finally commit these modifications [y/N]: ${term_norm}"
+ echo dummy | awk '{ printf("%s", TEXT); }' TEXT="$text"
+ if [ ".$V_batch" = .yes ]; then
+     echo ""
+ else
+     read answer
+     if [ ".$answer" = . -o ".$answer" = .n ]; then
+         cd ..
+         rm -rf CVSROOT
+         echo ""
+         echo "**Break: nothing touched."
+         echo ""
+         exit 0
+     fi
+ fi
+ echo ""
+ run "$V_tool_cvs commit -m 'Add Shiela -- CVS Access Control and Logging Facility' ."
+ run cd ..
+ run rm -rf CVSROOT
+ 
+ cat <<EOT
+ 
+ Ok, your $V_repos_path/CVSROOT/ area was modified to now use Shiela for
+ access control and logging. You can try it out by checking out CVSROOT
+ yourself and modify some files. You should receive an Email for every
+ modification. Then especially adjust "shiela.cfg" for your particular
+ repository layout.
+ 
+ EOT
+ 
+ rm -f $tmpfile
+ rm -f $tmpdir/shiela.cfg
+ rm -f $tmpdir/shiela.msg
+ 

CVSTrac 2.0.1