"Fossies" - the Fresh Open Source Software Archive

Member "xterm-379/sinstall.sh" (6 Mar 2010, 6215 Bytes) of package /linux/misc/xterm-379.tgz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) Bash source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file.

    1 #!/bin/sh
    2 # $XTermId: sinstall.sh,v 1.18 2010/03/06 16:19:13 tom Exp $
    3 # -----------------------------------------------------------------------------
    4 # this file is part of xterm
    5 #
    6 # Copyright 1999-2008,2010 by Thomas E. Dickey
    7 # 
    8 #                         All Rights Reserved
    9 # 
   10 # Permission is hereby granted, free of charge, to any person obtaining a
   11 # copy of this software and associated documentation files (the
   12 # "Software"), to deal in the Software without restriction, including
   13 # without limitation the rights to use, copy, modify, merge, publish,
   14 # distribute, sublicense, and/or sell copies of the Software, and to
   15 # permit persons to whom the Software is furnished to do so, subject to
   16 # the following conditions:
   17 # 
   18 # The above copyright notice and this permission notice shall be included
   19 # in all copies or substantial portions of the Software.
   20 # 
   21 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
   22 # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
   23 # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
   24 # IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
   25 # CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
   26 # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
   27 # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
   28 # 
   29 # Except as contained in this notice, the name(s) of the above copyright
   30 # holders shall not be used in advertising or otherwise to promote the
   31 # sale, use or other dealings in this Software without prior written
   32 # authorization.
   33 # -----------------------------------------------------------------------------
   34 #
   35 # Install program setuid if the installer is running as root, and if xterm is
   36 # already installed on the system with setuid privilege.  This is a safeguard
   37 # for ordinary users installing xterm for themselves on systems where the
   38 # setuid is not needed to access a PTY, but only for things like utmp.
   39 #
   40 # Options:
   41 #   u+s, g+s as in chmod
   42 #   -u, -g and -m as in install.  If any options are given, $3 is ignored.
   43 #
   44 # Parameters:
   45 #   $1 = program to invoke as "install"
   46 #   $2 = program to install
   47 #   $3 = previously-installed program, for reference
   48 #   $4 = final installed-path, if different from reference
   49 
   50 trace=:
   51 trace=echo
   52 
   53 # override locale...
   54 # (otherwise GNU ls displays date column in a locale-dependent manner).
   55 LANG=C;     export LANG
   56 LANGUAGE=C; export LANGUAGE
   57 LC_ALL=C;   export LC_ALL
   58 LC_CTYPE=C; export LC_CTYPE
   59 
   60 OPTS_SUID=
   61 OPTS_SGID=
   62 OPTS_MODE=
   63 OPTS_USR=
   64 OPTS_GRP=
   65 
   66 while test $# != 0
   67 do
   68     case $1 in
   69     -*)
   70         OPT="$1"
   71         shift
   72         if test $# != 0
   73         then
   74             case $OPT in
   75             -u) OPTS_USR="$1"; shift;;
   76             -g) OPTS_GRP="$1"; shift;;
   77             -m) OPTS_MODE="$1"; shift;;
   78             esac
   79         else
   80             break
   81         fi
   82         ;;
   83     u+s)    shift;  OPTS_SUID=4000;;
   84     g+s)    shift;  OPTS_SGID=2000;;
   85     *)  break
   86         ;;
   87     esac
   88 done
   89 
   90 SINSTALL="$1"
   91 SRC_PROG="$2"
   92 REF_PROG="$3"
   93 DST_PROG="$4"
   94 
   95 test -z "$SINSTALL" && SINSTALL=install
   96 test -z "$SRC_PROG" && SRC_PROG=xterm
   97 test -z "$REF_PROG" && REF_PROG=/usr/bin/X11/xterm
   98 test -z "$DST_PROG" && DST_PROG="$REF_PROG"
   99 
  100 test -n "$OPTS_SUID" && test -n "$OPTS_USR" && REF_PROG=
  101 test -n "$OPTS_SGID" && test -n "$OPTS_GRP" && REF_PROG=
  102 
  103 echo checking for presumed installation-mode
  104 
  105 PROG_SUID=
  106 PROG_SGID=
  107 PROG_MODE=
  108 PROG_USR=
  109 PROG_GRP=
  110 
  111 if test -z "$REF_PROG" ; then
  112     $trace "... reference program not used"
  113 elif test -f "$REF_PROG" ; then
  114     cf_option="-l -L"
  115     MYTEMP=${TMPDIR-/tmp}/sinstall$$
  116 
  117     # Expect listing to have fields like this:
  118     #-r--r--r--   1 user      group       34293 Jul 18 16:29 pathname
  119     ls $cf_option $REF_PROG
  120     ls $cf_option $REF_PROG >$MYTEMP
  121     read cf_mode cf_links cf_usr cf_grp cf_size cf_date1 cf_date2 cf_date3 cf_rest <$MYTEMP
  122     $trace "... if \"$cf_rest\" is null, try the ls -g option"
  123     if test -z "$cf_rest" ; then
  124         cf_option="$cf_option -g"
  125         ls $cf_option $REF_PROG
  126         ls $cf_option $REF_PROG >$MYTEMP
  127         read cf_mode cf_links cf_usr cf_grp cf_size cf_date1 cf_date2 cf_date3 cf_rest <$MYTEMP
  128     fi
  129     rm -f $MYTEMP
  130 
  131     # If we have a pathname, and the date fields look right, assume we've
  132     # captured the group as well.
  133     $trace "... if \"$cf_rest\" is null, we do not look for group"
  134     if test -n "$cf_rest" ; then
  135         cf_test=`echo "${cf_date2}${cf_date3}" | sed -e 's/[0-9:]//g'`
  136         $trace "... if we have date in proper columns ($cf_date1 $cf_date2 $cf_date3), \"$cf_test\" is null"
  137         if test -z "$cf_test" ; then
  138             PROG_USR=$cf_usr;
  139             PROG_GRP=$cf_grp;
  140         fi
  141     fi
  142     $trace "... derived user \"$PROG_USR\", group \"$PROG_GRP\" of previously-installed $SRC_PROG"
  143 
  144     $trace "... see if mode \"$cf_mode\" has s-bit set"
  145     case ".$cf_mode" in #(vi
  146     .???s??s*) #(vi
  147         $trace "... both setuid/setgid"
  148         PROG_SUID=4000
  149         PROG_SGID=2000
  150         ;;
  151     .???s*) #(vi
  152         $trace "... setuid"
  153         PROG_SUID=4000
  154         PROG_GRP=
  155         ;;
  156     .??????s*)
  157         $trace "... setgid"
  158         PROG_SGID=2000
  159         PROG_USR=
  160         ;;
  161     esac
  162     PROG_MODE=`echo ".$cf_mode" | sed -e 's/^..//' -e 's/rw./7/g' -e 's/r-./5/g' -e 's/---/0/g' -e 's/--[sxt]/1/g' -e 's/[^0-7]//g'`
  163 fi
  164 
  165 # passed-in options override the reference
  166 test -n "$OPTS_SUID" && PROG_SUID="$OPTS_SUID"
  167 test -n "$OPTS_SGID" && PROG_SGID="$OPTS_SGID"
  168 test -n "$OPTS_MODE" && PROG_MODE="$OPTS_MODE"
  169 test -n "$OPTS_USR"  && PROG_USR="$OPTS_USR"
  170 test -n "$OPTS_GRP"  && PROG_GRP="$OPTS_GRP"
  171 
  172 # we always need a mode
  173 test -z "$PROG_MODE" && PROG_MODE=755
  174 
  175 if test -n "${PROG_USR}${PROG_GRP}" ; then
  176     cf_uid=`id | sed -e 's/^[^=]*=//' -e 's/(.*$//'`
  177     cf_usr=`id | sed -e 's/^[^(]*(//' -e 's/).*$//'`
  178     cf_grp=`id | sed -e 's/^.* gid=[^(]*(//' -e 's/).*$//'`
  179     $trace "... installing $SRC_PROG as user \"$cf_usr\", group \"$cf_grp\""
  180     if test "$cf_uid" != 0 ; then
  181         PROG_SUID=
  182         PROG_SGID=
  183         PROG_USR=""
  184         PROG_GRP=""
  185     fi
  186     test "$PROG_USR" = "$cf_usr" && PROG_USR=""
  187     test "$PROG_GRP" = "$cf_grp" && PROG_GRP=""
  188 fi
  189 
  190 test -n "${PROG_SUID}${PROG_SGID}" && PROG_MODE=`expr $PROG_MODE % 1000`
  191 test -n "$PROG_SUID" && PROG_MODE=`expr $PROG_SUID + $PROG_MODE`
  192 test -n "$PROG_SGID" && PROG_MODE=`expr $PROG_SGID + $PROG_MODE`
  193 
  194 test -n "$PROG_USR" && PROG_USR="-o $PROG_USR"
  195 test -n "$PROG_GRP" && PROG_GRP="-g $PROG_GRP"
  196 
  197 echo "$SINSTALL -m $PROG_MODE $PROG_USR $PROG_GRP $SRC_PROG $DST_PROG"
  198 eval "$SINSTALL -m $PROG_MODE $PROG_USR $PROG_GRP $SRC_PROG $DST_PROG"