# create a temporary file in a secure way.
#
function maketemp() {
- if [ -x /bin/mktemp ]
- then
- local tempfile=`mktemp /tmp/$1.XXXXXXXX`
- else
- DATE=`date`
- sectmp=`echo $DATE | /usr/bin/md5sum | cut -d- -f1`
- local tempfile=/tmp/$1.$sectmp
- fi
+ local tempfile=`mktemp /tmp/$1.XXXXXXXX`
echo $tempfile
}
#
function getconf() {
CURRENT_PARAM=$1
- ret=`awk -f $libdirectory/parseini S=$CURRENT_SECTION P=$CURRENT_PARAM $CURRENT_CONF_FILE`
+ ret=`@AWK@ -f $libdirectory/parseini S=$CURRENT_SECTION P=$CURRENT_PARAM $CURRENT_CONF_FILE`
# if nothing is returned, set the default
if [ "$ret" == "" -a "$2" != "" ]; then
ret="$2"
# because it is in an 'eval' statement.
eval $1='$ret'
}
+
+#
+# Replaces escape sequences in $1 with the proper values for the vserver $2.
+# The result is put on stdout. If $2 is empty, values for the host are
+# replaced. The following values are replaced:
+#
+# %% Literal %
+# %h The short hostname (as returned by hostname -s)
+# %H The full hostname (as returned by hostname --fqdn)
+# %n The vserver name, or empty for the host
+# %N The vserver name, or "host" for the host
+# %v The vserver root directory, or empty for the host
+#
+# Note that the given vserver must be running!
+#
+function interpolate() {
+ path=$1
+ vsname=$2
+ vexec=${vsname:+$VSERVER $vsname exec }
+ # Find the values to replace
+ h=`$vexec hostname -s`
+ H=`$vexec hostname --fqdn`
+ n=$vsname
+ N=${vsname:-host}
+ v=${vsname:+$VROOTDIR/$vsname}
+
+ expr=''
+ for var in h H n N v; do
+ # Do indirect lookup of the value to replace
+ val=${!var}
+ # Escape slashes (twice, bash seems to eat one somewhere)
+ val=`echo "$val" | sed 's#/#\\\\/#g'`
+ # Add replacement pattern. The first part checks that there is
+ # an odd number of percent signs before the variable, so
+ # double % is properly left alone.
+ expr="${expr}s/\(\(^\|[^%]\)\(%%\)*\)%$var/\1$val/g;"
+ done
+ # Finally replace literal % signs
+ expr="${expr}s/%%/%/g"
+
+ # Do the actual interpolation
+ echo $path | sed "$expr"
+}