OpenPKG CVS Repository http://cvs.openpkg.org/ ____________________________________________________________________________
Server: cvs.openpkg.org Name: Ralf S. Engelschall Root: /e/openpkg/cvs Email: [EMAIL PROTECTED] Module: openpkg-src openpkg-web Date: 16-Jul-2003 10:13:51 Branch: HEAD Handle: 2003071609134703 Modified files: openpkg-src/openpkg HISTORY openpkg.spec rc rc.func rpmmacros openpkg-web news.txt Log: rc: - bugfix: check for stderr instead of stdout to determine whether terminal is attached - enhance: simplify verbose output generation (use 1 variable instead of 3) - enhance: remove --raw option and instead check whether output is connected to a terminal device - enhance: use more secure temporary file handling by using real subdir - enhance: honor $TMPDIR on temporary file handling - enhance: fully document the whole source code - cleanup: remove redundant code and use fewer external commands for operation rc.func: - use a umask approach for creating temporary files rpmmacros: - provide killer macro "%{l_value -s|-b|-c (l_xxx ...|-a|-A)}" Summary: Revision Changes Path 1.15 +1 -0 openpkg-src/openpkg/HISTORY 1.175 +1 -1 openpkg-src/openpkg/openpkg.spec 1.37 +232 -137 openpkg-src/openpkg/rc 1.7 +2 -4 openpkg-src/openpkg/rc.func 1.39 +14 -0 openpkg-src/openpkg/rpmmacros 1.5584 +1 -0 openpkg-web/news.txt ____________________________________________________________________________ patch -p0 <<'@@ .' Index: openpkg-src/openpkg/HISTORY ============================================================================ $ cvs diff -u -r1.14 -r1.15 HISTORY --- openpkg-src/openpkg/HISTORY 15 Jul 2003 13:44:11 -0000 1.14 +++ openpkg-src/openpkg/HISTORY 16 Jul 2003 08:13:50 -0000 1.15 @@ -2,6 +2,7 @@ 2003 ==== +20030716 cleaned and enhanced "rc" again; added %{l_value} killer macro 20030715 work-off "rc" again: add -o/--output options, better cleanup, global return code 20030715 add to "rc" the -v/--verbose option again and provide terminal-detection 20030714 reduce run-time of "rc" --eval/--print operations by parsing %config sections just once @@ . patch -p0 <<'@@ .' Index: openpkg-src/openpkg/openpkg.spec ============================================================================ $ cvs diff -u -r1.174 -r1.175 openpkg.spec --- openpkg-src/openpkg/openpkg.spec 15 Jul 2003 08:48:08 -0000 1.174 +++ openpkg-src/openpkg/openpkg.spec 16 Jul 2003 08:13:50 -0000 1.175 @@ -39,7 +39,7 @@ # o any cc(1) # the package version/release -%define V_openpkg 20030715 +%define V_openpkg 20030716 # the used software versions %define V_rpm 4.0.2 @@ . patch -p0 <<'@@ .' Index: openpkg-src/openpkg/rc ============================================================================ $ cvs diff -u -r1.36 -r1.37 rc --- openpkg-src/openpkg/rc 15 Jul 2003 13:44:11 -0000 1.36 +++ openpkg-src/openpkg/rc 16 Jul 2003 08:13:50 -0000 1.37 @@ -32,8 +32,8 @@ # program name, version and date progname="rc" -progvers="1.1.0" -progdate="09-Jul-2003" +progvers="1.2.0" +progdate="16-Jul-2003" # helper variables NL=" @@ -52,7 +52,6 @@ eval=0 config=0 query=0 -raw=0 rcdir="@l_prefix@/etc/rc.d" # iterate over argument line @@ -71,7 +70,6 @@ -e|--eval ) eval=1 ;; -c|--config ) config=1 ;; -q|--query ) query=1 ;; - -r|--raw ) raw=1 ;; --rcdir=* ) rcdir=$arg ;; -* ) help="Invalid option \`$opt'"; break ;; * ) break ;; @@ -79,31 +77,13 @@ shift done -# determine a reasonable default silent/verbose situation in case -# nothing was explicitly specified or a conflicting situation was -# specified. Else is silent set either disabled by default (0) or -# was explicitly enabled (1). -if [ $silent -eq $verbose ]; then - if [ -t 1 ]; then - # stdout connected to a terminal device - silent=0 - else - # stdout NOT connected to a terminal device - silent=1 - fi -fi - -# determine path to rc.conf -rcconf="`echo $rcdir | sed -e 's;/rc.d$;/rc.conf;'`" -rcfunc="`echo $rcdir | sed -e 's;/rc.d$;/rc.func;'`" - -# error or usage message +# display error or usage message if [ ".$help" != .0 ]; then if [ ".$help" != ".Usage" ]; then echo "$progname:ERROR: $help" 1>&2 fi - echo "Usage: $progname [-s|--silent] [-d|--debug] [-h|--help]" 1>&2 - echo " [-p|--print] [-e|--eval] [-c|--config] [-q|--query] [-r|--raw]" 1>&2 + echo "Usage: $progname [-s|--silent] [-v|--verbose] [-d|--debug] [-h|--help]" 1>&2 + echo " [-p|--print] [-e|--eval] [-c|--config] [-q|--query]" 1>&2 echo " <package> <command> [<command> ...]" 1>&2 if [ ".$help" != ".Usage" ]; then exit 1 @@ -112,46 +92,86 @@ fi fi -# extend run-time environment with our local tools (shtool, rpmtool, etc) +# determine a reasonable default silent/verbose situation in case +# nothing was explicitly specified or a conflicting situation was +# specified. Else is silent either disabled by default or was +# explicitly enabled. +if [ $silent -eq $verbose ]; then + if [ -t 2 ]; then + # stdout connected to a terminal device, so no need to be silent + silent=0 + else + # stdout NOT connected to a terminal device, so be silent + silent=1 + fi +fi + +# determine path to rc.conf and rc.func +rcconf="`echo $rcdir | sed -e 's;/rc.d$;/rc.conf;'`" +rcfunc="`echo $rcdir | sed -e 's;/rc.d$;/rc.func;'`" + +# extend run-time environment with local OpenPKG tools (shtool, rpmtool, etc) PATH="@l_prefix@/bin:$PATH" PATH="@l_prefix@/sbin:$PATH" PATH="@l_prefix@/lib/openpkg:$PATH" -# set a reasonable temporary location -tmpdir="/tmp" -tmpfile="$tmpdir/rc.$$.tmp" -outfile="$tmpdir/rc.$$.out" -errfile="$tmpdir/rc.$$.err" -allfile="$tmpdir/rc.$$.all" +# establish secure temporary directory +i=0 +while [ $i -lt 10 ]; do + tmpdir="${TMPDIR:-/tmp}/rc-`date '+%Y%m%d%H%M%S'`-$$" + (umask 077; mkdir $tmpdir) && break + i=`expr $i + 1` + sleep 1 +done +if [ $i -eq 10 ]; then + echo "openpkg:rc:ERROR: unable to establish secure temporary directory" 1>&2 + exit 1 +fi +declare -r tmpdir TMPDIR="$tmpdir"; export TMPDIR TEMPDIR="$tmpdir"; export TEMPDIR +trap "trap - EXIT INT ABRT QUIT TERM; rm -rf $tmpdir >/dev/null 2>&1 || true" EXIT INT ABRT QUIT TERM + +# determine reasonable temporary files +tmpfile="$tmpdir/rc.tmp" +outfile="$tmpdir/rc.out" +errfile="$tmpdir/rc.err" +allfile="$tmpdir/rc.all" # handle --query option if [ ".$query" = .1 ]; then - var="$1" + # suck in %config sections of all scripts for default values scripts=`/bin/ls $rcdir/rc.* | sed -e "s;^$rcdir/rc\.;;"` - rm -f $tmpfile touch $tmpfile for s_name in $scripts; do sed <$rcdir/rc.$s_name >>$tmpfile -e "1,/^%config/d" -e '/^%.*/,$d' done . $tmpfile + + # apply override values . $rcconf - eval "echo \${$var}" - rm -f $tmpfile + + # display variable value + for var in $*; do + eval "echo \${$var}" + done + + # stop processing immediately exit 0 fi # handle --config option if [ ".$config" = .1 ]; then + # suck in %config sections of all scripts for default values scripts=`/bin/ls $rcdir/rc.* | sed -e "s;^$rcdir/rc\.;;"` - rm -f $tmpfile touch $tmpfile for s_name in $scripts; do sed <$rcdir/rc.$s_name >>$tmpfile -e "1,/^%config/d" -e '/^%.*/,$d' done - vars="" . $tmpfile + + # remember default values + vars="" OIFS="$IFS"; IFS="$NL" for assign in `egrep '[ ]*[a-zA-Z_][a-zA-Z_0-9]*=' $tmpfile | sort`; do var=`echo "$assign" | sed -e 's;^[ ]*\([a-zA-Z_][a-zA-Z_0-9]*\)=.*;\1;'` @@ -159,14 +179,21 @@ eval "${var}_def=\"\$$var\"" done IFS="$OIFS" + + # apply override values to get effective values . $rcconf - if [ ".$raw" = .0 ]; then + + # determine how to print in bold mode in case output + # is connected to a terminal device + if [ -t 1 ]; then [EMAIL PROTECTED]@/lib/openpkg/shtool echo -e '%B'` [EMAIL PROTECTED]@/lib/openpkg/shtool echo -e '%b'` else begin_bold="" end_bold="" fi + + # iterate over all variables and display name, default and effective value echo "${begin_bold}Configuration Variable Effective Value Default Value${end_bold}" echo "------------------------ ------------------------- -- -------------------------" for var in . $vars; do @@ -184,11 +211,12 @@ echo dummy | awk '{ printf("%s%-24s %-25s %s %-25s%s\n", begin, var, val, tag, def, end); }' \ begin="$begin" var="$var" tag="$tag" val="\"$val\"" def="\"$def\"" end="$end" done - rm -f $tmpfile + + # stop processing immediately exit 0 fi -# determine script(s) to use +# determine script(s) to use and make sure they exist if [ $# -lt 1 ]; then echo "openpkg:rc:ERROR: no package and command(s) specified" 1>&2 exit 1 @@ -204,6 +232,7 @@ isall=1 . $rcconf if [ ".$openpkg_runall" != . ]; then + # backward compatibility only echo "openpkg:rc:WARNING: variable \"openpkg_runall\" was renamed to \"openpkg_rc_all\"." 1>&2 echo "openpkg:rc:WARNING: value of deprecated variable \"openpkg_runall\" taken over for compatibility." 1>&2 echo "openpkg:rc:WARNING: please update your local configuration in \"$rcconf\"." 1>&2 @@ -221,38 +250,28 @@ fi # determine current run-time user -user="`(id -un) 2>/dev/null`" +user=`(id -un) 2>/dev/null ||\ + (id | sed -e 's;^[^(]*(\([^)]*\)).*;\1;') 2>/dev/null ||\ + (whoami) 2>/dev/null ||\ + (who am i | cut "-d " -f1) 2>/dev/null ||\ + echo ${LOGNAME:-${USER}}` if [ ".$user" = . ]; then - user="`(whoami) 2>/dev/null | awk '{ printf("%s", $1); }'`" - if [ ".$user" = . ]; then - user="`(who am i) 2>/dev/null | awk '{ printf("%s", $1); }'`" - if [ ".$user" = . ]; then - user="$LOGNAME" - fi - if [ ".$user" = . ]; then - if [ ".$user" = . ]; then - user="$USER" - if [ ".$user" = . ]; then - echo "openpkg:rc:ERROR: unable to determine current username" 1>&2 - exit 1 - fi - fi - exit 1 - fi - fi + echo "openpkg:rc:ERROR: unable to determine current username" 1>&2 + exit 1 fi -# iterate over the commands +# iterate over the specified commands rv=0 cmds="$*" for cmd in $cmds; do + # create "all outputs" file for execution operation (i.e. not --print and --eval) if [ ".$print" = .0 -a ".$eval" = .0 ]; then rm -f $allfile touch $allfile fi # find scripts which contain the command and determine - # their individual user/prio settings + # their individual user/priority settings list='' for s_name in $scripts; do enable=yes @@ -265,7 +284,7 @@ fi fi - # check script options + # parse global script options # (currently unused in OpenPKG) shebangline=`head -1 $rcdir/rc.$s_name | grep "^#!rc"` if [ ".$shebangline" != . ]; then @@ -286,20 +305,21 @@ case $opt in -e|--enable ) enable=yes ;; -d|--disable ) enable=no ;; - * ) echo "openpkg:rc:WARNING: invalid option \"$opt\" in \"$rcdir/rc.$s_name:#!rc\""; break ;; + * ) echo "openpkg:rc:WARNING: invalid global option \"$opt\" in \"$rcdir/rc.$s_name:#!rc\""; break ;; esac shift done fi - # check whether command exists in script + # check whether command exists in script at all cmdline=`grep "^%$cmd" $rcdir/rc.$s_name` if [ ".$cmdline" != . ]; then + # parse local command options cmdopts=`echo "$cmdline" | sed -e "s;^%$cmd *;;"` s_user=$user s_prio=500 s_output=no - set -- $cmdopts; + set -- $cmdopts prev='' for opt do @@ -319,26 +339,37 @@ -o|--output ) s_output=yes ;; -u*|--user=* ) s_user=$arg ;; -p*|--prio=* ) s_prio=$arg ;; - * ) echo "openpkg:rc:WARNING: invalid option \"$opt\" in \"$rcdir/rc.$s_name:%$cmd\""; break ;; + * ) echo "openpkg:rc:WARNING: invalid local option \"$opt\" in \"$rcdir/rc.$s_name:%$cmd\""; break ;; esac shift done + + # sanity check: is operation supported by current environment? if [ ".$s_user" != ".$user" -a ".$user" != ".root" ]; then echo "openpkg:rc:ERROR: $s_name:%$cmd: require root privileges to run as user \"$s_user\"" 1>&2 exit 1 fi - # skip script if disabled + + # skip this script if script is disabled if [ ".$enable" != .yes ]; then continue fi + + # accumulate the determined information list="$list,$s_prio:$s_name:$s_user:$s_output" else + # command not found in script if [ ".$isall" = .0 ]; then echo "openpkg:rc:ERROR: $s_name: command \"$cmd\" not found" 1>&2 exit 1 fi fi done + + # if operating on all scripts, complain if a non-standard command + # was used and it was not found in any(!) script at all. The + # standard commands are accepted to perform no operation if no + # packages are currently installed which provide such commands. if [ ".$list" = . -a ".$isall" = .1 ]; then case "$cmd" in start|stop|monthly|weekly|daily|hourly|quarterly ) @@ -351,121 +382,185 @@ esac fi - # execute/print the scripts in order + # generate global (loop invariant) header for script in case of + # --print and --eval (for the execution approach we cannot do + # this, because there a new script is generated from scratch for + # each package. if [ ".$print" = .1 -o ".$eval" = .1 ]; then rm -f $tmpfile touch $tmpfile + + # generate: optionally enable shell debugging if [ ".$debug" = .1 ]; then echo "set -x" >>$tmpfile fi + + # generate: inclusion of the run-command helper functions echo ". $rcfunc" >>$tmpfile + + # generate: all %config sections of all(!) scripts. We cannot + # just include those which have the current command in it + # because by design all command scripts see the %config + # section of all(!) scripts. Because of $openpkg_rc_def the + # variable, we place the %config section of "openpkg" to the front. l_scripts=`/bin/ls $rcdir/rc.* | sed -e "s;^$rcdir/rc\.;;" | egrep -v '^openpkg$' | sort` l_scripts="openpkg $l_scripts" for l_name in $l_scripts; do sed <$rcdir/rc.$l_name >>$tmpfile -e "1,/^%config/d" -e '/^%.*/,$d' done + + # generate: inclusion of the application of override variables echo ". $rcconf" >>$tmpfile fi - verbose_first=1 - verbose_output=0 + + # iterate over all packages (in priority order!) where the command + # iwas found n order to execute, print, or evaluate their scripts verbose_pos=0 for entry in `echo $list | tr ',' '\012' | sort -n`; do - test ".$entry" = . && continue + [ ".$entry" = . ] && continue + + # re-determine the script name, script and whether to print output eval `echo $entry | sed -e 's%^[0-9]*:\(.*\):\(.*\):\(.*\)$%s_name="\1"; s_user="\2"; s_output="\3";%'` - if [ ".$print" = .0 -a ".$eval" = .0 ]; then + + # display verbose progress message parts + if [ ".$print" = .0 -a ".$eval" = .0 -a ".$silent" = .0 ]; then + # line break if we already have output more than 70 + # characters (notice that usually already more characters + # where printed, because of the name of the last script) if [ $verbose_pos -gt 70 ]; then verbose_pos=0 - verbose_first=1 echo "" 1>&2 fi - if [ ".$verbose_first" = .1 ]; then - verbose_first=0 - if [ ".$silent" != .1 ]; then - verbose_output=1 - echo . | awk '{ printf("OpenPKG: %s: ", cmd); }' cmd="$cmd" 1>&2 - l=`echo . | awk '{ printf("OpenPKG: %s: ", cmd); }' cmd="$cmd" | wc -c | awk '{ print $1; }'` - verbose_pos=`expr $verbose_pos + $l` - fi + + # display verbose message parts: prefix (on first), separator and package + if [ $verbose_pos -eq 0 ]; then + echo . | awk '{ printf("OpenPKG: %s: ", cmd); }' cmd="$cmd" 1>&2 + l=`echo . | awk '{ printf("OpenPKG: %s: ", cmd); }' cmd="$cmd" | wc -c | awk '{ print $1; }'` + verbose_pos=`expr $verbose_pos + $l` prefix="" else prefix=", " fi - if [ ".$silent" != .1 ]; then - echo . | awk '{ printf("%s%s", prefix, s_name); }' prefix="$prefix" s_name="$s_name" 1>&2 - l=`echo . | awk '{ printf("%s%s", prefix, s_name); }' prefix="$prefix" s_name="$s_name" | wc -c | awk '{ print $1; }'` - verbose_pos=`expr $verbose_pos + $l` - fi - fi - if [ ".$debug" = .1 ]; then - echo "openpkg:rc:DEBUG: executing \"$rcdir/rc.$s_name:%$cmd\" as user \"$s_user\"" 1>&2 + echo . | awk '{ printf("%s%s", prefix, s_name); }' prefix="$prefix" s_name="$s_name" 1>&2 + l=`echo . | awk '{ printf("%s%s", prefix, s_name); }' prefix="$prefix" s_name="$s_name" | wc -c | awk '{ print $1; }'` + verbose_pos=`expr $verbose_pos + $l` fi + + # now operate on the particular script if [ ".$print" = .1 -o ".$eval" = .1 ]; then + # special case: under --print and --eval we just add the + # %common and command scripts to the generated output script + # and do not execute anything at this point. sed <$rcdir/rc.$s_name >>$tmpfile -e "1,/^%common/d" -e '/^%.*/,$d' sed <$rcdir/rc.$s_name >>$tmpfile -e "1,/^%$cmd/d" -e '/^%.*/,$d' - continue - fi - rm -f $tmpfile $outfile $errfile - touch $tmpfile $outfile $errfile - if [ ".$debug" = .1 ]; then - echo "set -x" >>$tmpfile - fi - echo ". $rcfunc" >>$tmpfile - l_scripts=`/bin/ls $rcdir/rc.* | sed -e "s;^$rcdir/rc\.;;" | egrep -v '^openpkg$' | sort` - l_scripts="openpkg $l_scripts" - for l_name in $l_scripts; do - sed <$rcdir/rc.$l_name >>$tmpfile -e "1,/^%config/d" -e '/^%.*/,$d' - done - echo ". $rcconf" >>$tmpfile - sed <$rcdir/rc.$s_name >>$tmpfile -e "1,/^%common/d" -e '/^%.*/,$d' - sed <$rcdir/rc.$s_name >>$tmpfile -e "1,/^%$cmd/d" -e '/^%.*/,$d' - sh="@l_prefix@/lib/openpkg/bash" - if [ ".$user" != ".$s_user" ]; then - su - $s_user -c "PATH=\"$PATH\"; $sh $tmpfile" >$outfile 2>$errfile - rc=$? else - $sh $tmpfile >$outfile 2>$errfile - rc=$? - fi - if [ $rc -ne 0 ]; then - if [ ".$silent" != .1 ]; then - echo ":FAILED" 1>&2 - fi - echo "openpkg:rc:WARNING: @l_prefix@:$s_name:%$cmd: failed with return code $rc" 1>&2 - if [ ".`cat $outfile $errfile`" != . ]; then - ( echo "+----Log:--------------------------------------------------------------" - cat $outfile $errfile | sed -e 's;^;| ;' - echo "+----------------------------------------------------------------------" + # the regular case of executing the command script directly + + # prepare temporary files + rm -f $tmpfile $outfile $errfile + touch $tmpfile $outfile $errfile + + # generate: optionally enable shell debugging + if [ ".$debug" = .1 ]; then + echo "set -x" >>$tmpfile + fi + + # generate: inclusion of the run-command helper functions + echo ". $rcfunc" >>$tmpfile + + # generate: all %config sections of all(!) scripts. We cannot + # just include those which have the current command in it + # because by design all command scripts see the %config + # section of all(!) scripts. Because of $openpkg_rc_def the + # variable, we place the %config section of "openpkg" to the front. + l_scripts=`/bin/ls $rcdir/rc.* | sed -e "s;^$rcdir/rc\.;;" | egrep -v '^openpkg$' | sort` + l_scripts="openpkg $l_scripts" + for l_name in $l_scripts; do + sed <$rcdir/rc.$l_name >>$tmpfile -e "1,/^%config/d" -e '/^%.*/,$d' + done + + # generate: inclusion of the application of override variables + echo ". $rcconf" >>$tmpfile + + # generate: %common section and particular command section + sed <$rcdir/rc.$s_name >>$tmpfile -e "1,/^%common/d" -e '/^%.*/,$d' + sed <$rcdir/rc.$s_name >>$tmpfile -e "1,/^%$cmd/d" -e '/^%.*/,$d' + + # execute the generated script with GNU Bash + sh="@l_prefix@/lib/openpkg/bash" + if [ ".$user" != ".$s_user" ]; then + # execute as different user + su - $s_user -c "PATH=\"$PATH\"; $sh $tmpfile" >$outfile 2>$errfile + rc=$? + else + # execute as current user + $sh $tmpfile >$outfile 2>$errfile + rc=$? + fi + if [ $rc -ne 0 ]; then + if [ ".$silent" = .0 ]; then + # indicate failure of execution on verbose message line + echo ":FAILED" 1>&2 + verbose_pos=0 + fi + # give details of execution failure + ( echo "openpkg:rc:WARNING: @l_prefix@:$s_name:%$cmd: failed with return code $rc" 1>&2 + if [ ".`cat $outfile $errfile`" != . ]; then + echo "+----Log:--------------------------------------------------------------" + cat $outfile $errfile | sed -e 's;^;| ;' + echo "+----------------------------------------------------------------------" + fi ) 1>&2 - fi - verbose_first=1 - verbose_pos=0 - rv=1 - else - if [ ".$s_output" = .yes ]; then - cat $outfile >>$allfile + + # enforce global return value + rv=1 + else + if [ ".$s_output" = .yes ]; then + # accumulate script output for later display + cat $outfile >>$allfile + fi fi fi done - if [ ".$print" = .1 -o ".$eval" = .1 ]; then - if [ ".$print" = .1 ]; then - cat $tmpfile - elif [ ".$eval" = .1 ]; then - echo ". $tmpfile; rm -f $tmpfile 2>/dev/null || true" - fi + + # post-processing for each command + if [ ".$print" = .1 ]; then + # for --print just print the resulting script + cat $tmpfile + elif [ ".$eval" = .1 ]; then + # for --eval we cannot just print the resulting script because + # not all Bourne-Shell implementations like to "eval" large + # multi-line outputs. Hence we output a little one-liner which + # "sources" the script instead and cleans up. To make sure the + # "rm -rf $tmpdir" is not run by the automatic cleanup code, + # remove the EXIT trap. + echo ". $tmpfile; rm -rf $tmpdir 2>/dev/null || true" else - if [ ".$silent" != .1 -a ".$verbose_output" = .1 -a $verbose_pos -gt 0 ]; then + # for the execution situation just make sure we + # terminate the verbose message output. + if [ ".$silent" = .0 -a $verbose_pos -gt 0 ]; then echo "." 1>&2 fi + + # additionally, if a script wants its output to be displayed, + # now do it. In case there was no such request, do not bother + # -- we then just output an empty file and so can avoid an + # extra test surrounding the next command. cat $allfile fi done -# cleanup temporary files +# cleanup temporary files except the result script in +# case of --eval (which is then removed by the caller). rm -f $outfile $errfile $allfile >/dev/null 2>&1 || true if [ ".$eval" = .0 ]; then rm -f $tmpfile >/dev/null 2>&1 || true + rm -rf $tmpdir >/dev/null 2>&1 || true fi -# exit gracefully with global return value +# now clean the exit trap and exit with the global return value +# indicating to the caller whether all scripts were executed +# successfully or at least one failed. +trap - EXIT exit $rv @@ . patch -p0 <<'@@ .' Index: openpkg-src/openpkg/rc.func ============================================================================ $ cvs diff -u -r1.6 -r1.7 rc.func --- openpkg-src/openpkg/rc.func 15 Jul 2003 10:08:26 -0000 1.6 +++ openpkg-src/openpkg/rc.func 16 Jul 2003 08:13:50 -0000 1.7 @@ -147,8 +147,7 @@ opTmpDirGen () { _tmpdir="@l_prefix@/RPM/TMP/${1}" rm -rf ${_tmpdir} >/dev/null 2>&1 || true - mkdir ${_tmpdir} >/dev/null 2>&1 || true - chmod 700 ${_tmpdir} >/dev/null 2>&1 || true + (umask 077; mkdir ${_tmpdir} >/dev/null 2>&1 || true) } # @@ -160,8 +159,7 @@ opTmpDirFile () { _tmpdir="@l_prefix@/RPM/TMP/${1}" eval "${3}=\"${_tmpdir}/${2}\"" - touch "${_tmpdir}/${2}" >/dev/null 2>&1 || true - chmod 700 "${_tmpdir}/${2}" >/dev/null 2>&1 || true + (umask 077; touch "${_tmpdir}/${2}" >/dev/null 2>&1 || true) } # @@ . patch -p0 <<'@@ .' Index: openpkg-src/openpkg/rpmmacros ============================================================================ $ cvs diff -u -r1.38 -r1.39 rpmmacros --- openpkg-src/openpkg/rpmmacros 15 Jul 2003 10:08:26 -0000 1.38 +++ openpkg-src/openpkg/rpmmacros 16 Jul 2003 08:13:50 -0000 1.39 @@ -80,6 +80,20 @@ %l_mandir %{l_root_install}/man %l_docdir %{l_root_install}/doc +# provide killer macro "%{l_value -s|-b|-c (l_xxx ...|-a|-A)}" which +# expands to the values of previous l_xxx variables in this file. With +# option "-s" it expands into a chain of "-e 's;<name>;<value>;g'" +# constructs for used with Stream Editor sed(1), with option "-b" it +# expands into a chain of "<name>='<value>';" constructs for use with +# Bourne-Shell sh(1), with option "-c" it expands into a chain of "set +# <name> = '<value>';" constructs for use with C-Shell csh(1). But +# be careful, <value> currently (for expansion speed reasons) is not +# escaped, so make sure the values of the above macros do not contain +# ";" for "-s" and ";" for "-b" and "-c". You can either specify one +# or more names of variables to expand or use "-a" for mostly all +# variables and "-A" for really all variables. +%l_value(sbcaA) %{expand:%(l=""; for x in `if [ ".%*" != . ]; then echo "%* "; else p=""; if [ ".%{-a:yes}" = .yes ]; then p="^%%l_(prefix|[smrn](usr|grp|uid|gid))"; elif [ ".%{-A:yes}" = .yes ]; then p="^%%l_"; fi; if [ ".$p" != . ]; then egrep "$p" %{l_prefix}/etc/openpkg/rpmmacros | sed -e '/^%%l_value/,$d' -e 's;^%%\\(l_[a-z1-9_]*\\).*;\\1;'; fi; fi`; do e=""; if [ ".%{-s:yes}" = .yes ]; then e="-e 's;@$x@;%%{$x};g'"; elif [ ".%{-b:yes}" = .yes ]; then e="$x='%%{$x}';"; elif [ ".%{-c:yes}" = .yes ]; then e="set $x = '%%{$x}';"; else e="%%{$x}"; fi; if [ ".$l" = . ]; then l="$e"; else l="$l $e"; fi; done; echo "$l")} + # override the internal RPM hierarchy variables %_usr %{l_root_rpm} %_var %{l_root_rpm} @@ . patch -p0 <<'@@ .' Index: openpkg-web/news.txt ============================================================================ $ cvs diff -u -r1.5583 -r1.5584 news.txt --- openpkg-web/news.txt 16 Jul 2003 07:10:01 -0000 1.5583 +++ openpkg-web/news.txt 16 Jul 2003 08:13:47 -0000 1.5584 @@ -1,3 +1,4 @@ +16-Jul-2003: Upgraded package: P<openpkg-20030716-20030716> 16-Jul-2003: Upgraded package: P<xmlsec-1.0.4-20030716> 16-Jul-2003: Upgraded package: P<sasl-2.1.15-20030716> 16-Jul-2003: Upgraded package: P<txt2html-2.03-20030716> @@ . ______________________________________________________________________ The OpenPKG Project www.openpkg.org CVS Repository Commit List [EMAIL PROTECTED]