Start to move common functions (maketemp) to lib/tools, and better use autotools for lib/{easydialog,tools}.
+EXTRALIBS = easydialog tools
+dist_pkglib_DATA = $(EXTRALIBS)
+EXTRA_DIST = easydialog.in tools.in
-EXTRALIBRARIES = easydialog.sh
+edit = sed \
+ -e "s,@BASH\@,$(BASH),g"
-EXTRA_DIST = Makefile.am $(EXTRALIBRARIES)
+easydialog: easydialog.in
+ rm -f easydialog
+ $(edit) easydialog.in > easydialog
-dist_pkglib_DATA = $(EXTRALIBRARIES)
+tools: tools.in
+ rm -f tools
+ $(edit) tools.in > tools
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
-EXTRALIBRARIES = easydialog.sh
-EXTRA_DIST = Makefile.am $(EXTRALIBRARIES)
-dist_pkglib_DATA = $(EXTRALIBRARIES)
+EXTRALIBS = easydialog tools
+dist_pkglib_DATA = $(EXTRALIBS)
+EXTRA_DIST = easydialog.in tools.in
+edit = sed \
+ -e "s,@BASH\@,$(BASH),g"
+
all: all-am
.SUFFIXES:
pdf-am ps ps-am uninstall uninstall-am \
uninstall-dist_pkglibDATA uninstall-info-am
+
+easydialog: easydialog.in
+ rm -f easydialog
+ $(edit) easydialog.in > easydialog
+
+tools: tools.in
+ rm -f tools
+ $(edit) tools.in > tools
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
--- /dev/null
+#!@BASH@
+
+# copyright 2002 lmoore@tump.com under the terms of the GNU LGPL.
+# additions 2005 collective@riseup.net
+
+# whiptail has trouble being called in the foo=$(whiptail ...) fashion for
+# some reason. this is very annoying. this means that we need to use
+# temporary files to store the answers from the input and list based boxes
+# and then read the answers into a REPLY variable. that just really
+# stinks, oh well, that's what you get when you have a weak link
+# implementation...
+#
+# inputBox and passwordBox could be refactored to use a common function
+
+test -z "$WIDTH" && WIDTH=0
+test -z "$HEIGHT" && HEIGHT=0
+BACKTITLE=""
+DIALOG=dialog
+HELP=
+
+setApplicationTitle() {
+ BACKTITLE=$*
+}
+
+setHelp() {
+ HELP="$@"
+}
+
+setDimension() {
+ WIDTH=$1
+ HEIGHT=$2
+}
+
+booleanBox() {
+ $DIALOG --backtitle "$BACKTITLE" --title "$1" \
+ `[ "$3" == no ] && echo '--defaultno'` --yesno "$2" $HEIGHT $WIDTH
+}
+
+msgBox() {
+ $DIALOG --backtitle "$BACKTITLE" --title "$1" \
+ --msgbox "$2" $HEIGHT $WIDTH
+}
+
+gaugeBox() {
+ $DIALOG --backtitle "$BACKTITLE" --title "$1" \
+ --gauge "$2" $HEIGHT $WIDTH 0
+}
+
+inputBox() {
+ local temp=$(mktemp -t) || exit 1
+ trap "rm -f $temp" 0
+ REPLY=
+ $DIALOG --backtitle "$BACKTITLE" --title "$1" \
+ --inputbox "$2" $HEIGHT $WIDTH "$3" 2> $temp
+ local status=$?
+ [ $status = 0 ] && REPLY=$(cat $temp)
+ rm -f $temp
+ return $status
+}
+
+# Xdialog and {dialog,whiptail} use different mechanism to "qoute" the
+# values from a checklist. {dialog,whiptail} uses standard double quoting
+# while Xdialog uses a "/" as the separator. the slash is arguably better,
+# but the double quoting is more standard. anyway, this function can be
+# overridden to allow a derived implementation to change it's quoting
+# mechanism to the standard double-quoting one. it receives two
+# arguements, the file that has the data and the box type.
+_listReplyHook() {
+ cat $1
+}
+
+# this is the base implementation of all the list based boxes, it works
+# out nicely that way. the real function just passes it's arguments to
+# this function with an extra argument specifying the actual box that
+# needs to be rendered.
+_genericListBox() {
+ local box=$1
+ shift 1
+ local title=$1
+ local text=$2
+ shift 2
+ local temp=$(mktemp -t) || exit 1
+ trap "rm -f $temp" 0
+ REPLY=
+ $DIALOG $HELP $_DEFAULT --backtitle "$BACKTITLE" --title "$title" \
+ $box "$text" $HEIGHT $WIDTH 10 \
+ "$@" 2> $temp
+ local status=$?
+ [ $status = 0 ] && REPLY=$(_listReplyHook $temp $box)
+ rm -f $temp
+ _DEFAULT=
+ return $status
+}
+
+setDefault() {
+ _DEFAULT="--default-item $1"
+}
+
+menuBox() {
+ _genericListBox --menu "$@"
+}
+
+## a menu box with additional help info displayed
+## at the bottom of the window when an item is selected
+menuBoxHelp() {
+ HELP="--item-help"
+ _genericListBox --menu "$@"
+ status=$?
+ HELP=
+ return $status
+}
+
+## a menu box with an addition button 'help'
+menuBoxHelpFile() {
+ HELP="--help-button"
+ _genericListBox --menu "$@"
+ status=$?
+ HELP=
+ return $status
+}
+
+checkBox() {
+ _genericListBox --checklist "$@"
+}
+
+radioBox() {
+ _genericListBox --radiolist "$@"
+}
+
+textBox() {
+ $DIALOG --backtitle "$BACKTITLE" --title "$1" --textbox "$2" $HEIGHT $WIDTH
+}
+
+passwordBox() {
+ local temp=$(mktemp -t) || exit 1
+ trap "rm -f $temp" 0
+ REPLY=
+ $DIALOG --backtitle "$BACKTITLE" --title "$1" \
+ --passwordbox "$2" $HEIGHT $WIDTH 2> $temp
+ local status=$?
+ [ $status = 0 ] && REPLY=$(cat $temp)
+ rm -f $temp
+ return $status
+}
+
+
+#########################################################
+## begin-item-display style lists
+##
+## these lists are built by calling fuctions multiple times.
+## this can make it easier to build your list in a loop
+##
+
+listBegin() {
+ _menu_title=$1
+ _menu_msg=$2
+ _menu_items=0
+ _menu_text=
+ _menu_labels=
+ _menu_status=
+}
+
+listItem() {
+ _menu_labels[$_menu_items]=$1
+ _menu_text[$_menu_items]=$2
+ _menu_status[$_menu_items]=$3 # available only for checklist
+ let "_menu_items += 1"
+}
+
+
+##
+## takes one of:
+## menu, checklist, radiolist
+##
+listDisplay() {
+ boxtype=$1
+ local temp=$(mktemp -t) || exit 1
+ trap "rm -f $temp" 0
+
+ local label
+ local text
+ local status
+ (
+ echo -ne " $HELP $_DEFAULT "
+ echo -ne " --backtitle '$BACKTITLE' "
+ echo -ne " --title '$_menu_title' "
+ echo -ne " --$boxtype '$_menu_msg' "
+ echo -ne " $HEIGHT $WIDTH 10 "
+ for ((i=0; i < $_menu_items ; i++)); do
+ label=${_menu_labels[$i]}
+ text=${_menu_text[$i]}
+ status=${_menu_status[$i]}
+ echo -ne " $label '$text' $status "
+ done
+ ) | xargs $DIALOG 2> $temp
+
+ local status=$?
+ REPLY=""
+ [ $status = 0 ] && REPLY=`cat $temp`
+ rm -f $temp
+ _DEFAULT=
+ return $status
+}
+
+####################################################
+## FORM
+
+_form_gap=2
+formBegin() {
+ _form_title=$1
+ _form_items=0
+ _form_labels=
+ _form_text=
+}
+
+formItem() {
+ _form_labels[$_form_items]=$1
+ _form_text[$_form_items]=$2
+ let "_form_items += 1"
+}
+
+formDisplay() {
+ local temp=$(mktemp -t) || exit 1
+
+ max_length=0
+ for ((i=0; i < ${#_form_labels[@]} ; i++)); do
+ label=${_form_labels[$i]}
+ length=`expr length $label`
+ if [ $length -gt $max_length ]; then
+ max_length=$length
+ fi
+ done
+ let "max_length += 2"
+
+ local xpos=1
+ (
+ echo -n -e "--form '$_form_title' 0 0 20"
+ for ((i=0; i < $_form_items ; i++)); do
+ label=${_form_labels[$i]}
+ text=${_form_text[$i]}
+ echo -n -e " $label $xpos 1 '$text' $xpos $max_length 30 30"
+ let "xpos += _form_gap"
+ done
+ ) | xargs $DIALOG 2> $temp
+ local status=$?
+
+ REPLY=
+ if [ $status = 0 ]; then
+ IFS=$''
+ REPLY=`cat $temp`
+ IFS=$' \t\n'
+ fi
+ rm -f $temp
+ return $status
+}
+++ /dev/null
-#!/bin/bash
-
-# copyright 2002 lmoore@tump.com under the terms of the GNU LGPL.
-# additions 2005 collective@riseup.net
-
-# whiptail has trouble being called in the foo=$(whiptail ...) fashion for
-# some reason. this is very annoying. this means that we need to use
-# temporary files to store the answers from the input and list based boxes
-# and then read the answers into a REPLY variable. that just really
-# stinks, oh well, that's what you get when you have a weak link
-# implementation...
-#
-# inputBox and passwordBox could be refactored to use a common function
-
-test -z "$WIDTH" && WIDTH=0
-test -z "$HEIGHT" && HEIGHT=0
-BACKTITLE=""
-DIALOG=dialog
-HELP=
-
-setApplicationTitle() {
- BACKTITLE=$*
-}
-
-setHelp() {
- HELP="$@"
-}
-
-setDimension() {
- WIDTH=$1
- HEIGHT=$2
-}
-
-booleanBox() {
- $DIALOG --backtitle "$BACKTITLE" --title "$1" \
- `[ "$3" == no ] && echo '--defaultno'` --yesno "$2" $HEIGHT $WIDTH
-}
-
-msgBox() {
- $DIALOG --backtitle "$BACKTITLE" --title "$1" \
- --msgbox "$2" $HEIGHT $WIDTH
-}
-
-gaugeBox() {
- $DIALOG --backtitle "$BACKTITLE" --title "$1" \
- --gauge "$2" $HEIGHT $WIDTH 0
-}
-
-inputBox() {
- local temp=$(mktemp -t) || exit 1
- trap "rm -f $temp" 0
- REPLY=
- $DIALOG --backtitle "$BACKTITLE" --title "$1" \
- --inputbox "$2" $HEIGHT $WIDTH "$3" 2> $temp
- local status=$?
- [ $status = 0 ] && REPLY=$(cat $temp)
- rm -f $temp
- return $status
-}
-
-# Xdialog and {dialog,whiptail} use different mechanism to "qoute" the
-# values from a checklist. {dialog,whiptail} uses standard double quoting
-# while Xdialog uses a "/" as the separator. the slash is arguably better,
-# but the double quoting is more standard. anyway, this function can be
-# overridden to allow a derived implementation to change it's quoting
-# mechanism to the standard double-quoting one. it receives two
-# arguements, the file that has the data and the box type.
-_listReplyHook() {
- cat $1
-}
-
-# this is the base implementation of all the list based boxes, it works
-# out nicely that way. the real function just passes it's arguments to
-# this function with an extra argument specifying the actual box that
-# needs to be rendered.
-_genericListBox() {
- local box=$1
- shift 1
- local title=$1
- local text=$2
- shift 2
- local temp=$(mktemp -t) || exit 1
- trap "rm -f $temp" 0
- REPLY=
- $DIALOG $HELP $_DEFAULT --backtitle "$BACKTITLE" --title "$title" \
- $box "$text" $HEIGHT $WIDTH 10 \
- "$@" 2> $temp
- local status=$?
- [ $status = 0 ] && REPLY=$(_listReplyHook $temp $box)
- rm -f $temp
- _DEFAULT=
- return $status
-}
-
-setDefault() {
- _DEFAULT="--default-item $1"
-}
-
-menuBox() {
- _genericListBox --menu "$@"
-}
-
-## a menu box with additional help info displayed
-## at the bottom of the window when an item is selected
-menuBoxHelp() {
- HELP="--item-help"
- _genericListBox --menu "$@"
- status=$?
- HELP=
- return $status
-}
-
-## a menu box with an addition button 'help'
-menuBoxHelpFile() {
- HELP="--help-button"
- _genericListBox --menu "$@"
- status=$?
- HELP=
- return $status
-}
-
-checkBox() {
- _genericListBox --checklist "$@"
-}
-
-radioBox() {
- _genericListBox --radiolist "$@"
-}
-
-textBox() {
- $DIALOG --backtitle "$BACKTITLE" --title "$1" --textbox "$2" $HEIGHT $WIDTH
-}
-
-passwordBox() {
- local temp=$(mktemp -t) || exit 1
- trap "rm -f $temp" 0
- REPLY=
- $DIALOG --backtitle "$BACKTITLE" --title "$1" \
- --passwordbox "$2" $HEIGHT $WIDTH 2> $temp
- local status=$?
- [ $status = 0 ] && REPLY=$(cat $temp)
- rm -f $temp
- return $status
-}
-
-
-#########################################################
-## begin-item-display style lists
-##
-## these lists are built by calling fuctions multiple times.
-## this can make it easier to build your list in a loop
-##
-
-listBegin() {
- _menu_title=$1
- _menu_msg=$2
- _menu_items=0
- _menu_text=
- _menu_labels=
- _menu_status=
-}
-
-listItem() {
- _menu_labels[$_menu_items]=$1
- _menu_text[$_menu_items]=$2
- _menu_status[$_menu_items]=$3 # available only for checklist
- let "_menu_items += 1"
-}
-
-
-##
-## takes one of:
-## menu, checklist, radiolist
-##
-listDisplay() {
- boxtype=$1
- local temp=$(mktemp -t) || exit 1
- trap "rm -f $temp" 0
-
- local label
- local text
- local status
- (
- echo -ne " $HELP $_DEFAULT "
- echo -ne " --backtitle '$BACKTITLE' "
- echo -ne " --title '$_menu_title' "
- echo -ne " --$boxtype '$_menu_msg' "
- echo -ne " $HEIGHT $WIDTH 10 "
- for ((i=0; i < $_menu_items ; i++)); do
- label=${_menu_labels[$i]}
- text=${_menu_text[$i]}
- status=${_menu_status[$i]}
- echo -ne " $label '$text' $status "
- done
- ) | xargs $DIALOG 2> $temp
-
- local status=$?
- REPLY=""
- [ $status = 0 ] && REPLY=`cat $temp`
- rm -f $temp
- _DEFAULT=
- return $status
-}
-
-####################################################
-## FORM
-
-_form_gap=2
-formBegin() {
- _form_title=$1
- _form_items=0
- _form_labels=
- _form_text=
-}
-
-formItem() {
- _form_labels[$_form_items]=$1
- _form_text[$_form_items]=$2
- let "_form_items += 1"
-}
-
-formDisplay() {
- local temp=$(mktemp -t) || exit 1
-
- max_length=0
- for ((i=0; i < ${#_form_labels[@]} ; i++)); do
- label=${_form_labels[$i]}
- length=`expr length $label`
- if [ $length -gt $max_length ]; then
- max_length=$length
- fi
- done
- let "max_length += 2"
-
- local xpos=1
- (
- echo -n -e "--form '$_form_title' 0 0 20"
- for ((i=0; i < $_form_items ; i++)); do
- label=${_form_labels[$i]}
- text=${_form_text[$i]}
- echo -n -e " $label $xpos 1 '$text' $xpos $max_length 30 30"
- let "xpos += _form_gap"
- done
- ) | xargs $DIALOG 2> $temp
- local status=$?
-
- REPLY=
- if [ $status = 0 ]; then
- IFS=$''
- REPLY=`cat $temp`
- IFS=$' \t\n'
- fi
- rm -f $temp
- return $status
-}
--- /dev/null
+#!@BASH@
+
+
+#
+# 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
+ echo $tempfile
+}
+
+
exit 1
fi
-. $libdir/easydialog.sh
+. $libdir/easydialog
if [ "$UID" != "0" ]; then
msgBox "warning" "ninjahelper must be run by root!"