faxsetup.sh.in
上传用户:weiyuanprp
上传日期:2020-05-20
资源大小:1169k
文件大小:64k
源码类别:

传真(Fax)编程

开发平台:

C/C++

  1. #! @SCRIPT_SH@
  2. # $Id: faxsetup.sh.in,v 1.24 2008/12/08 21:14:33 faxguy Exp $
  3. #
  4. # @WARNING@
  5. #
  6. # HylaFAX Facsimile Software
  7. #
  8. # Copyright (c) 1990-1996 Sam Leffler
  9. # Copyright (c) 1991-1996 Silicon Graphics, Inc.
  10. # HylaFAX is a trademark of Silicon Graphics
  11. # Permission to use, copy, modify, distribute, and sell this software and 
  12. # its documentation for any purpose is hereby granted without fee, provided
  13. # that (i) the above copyright notices and this permission notice appear in
  14. # all copies of the software and related documentation, and (ii) the names of
  15. # Sam Leffler and Silicon Graphics may not be used in any advertising or
  16. # publicity relating to the software without the specific, prior written
  17. # permission of Sam Leffler and Silicon Graphics.
  18. # THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, 
  19. # EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY 
  20. # WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.  
  21. # IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
  22. # ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
  23. # OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
  24. # WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF 
  25. # LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 
  26. # OF THIS SOFTWARE.
  27. #
  28. #
  29. # VERSION: @VERSION@
  30. # DATE: @DATE@
  31. # TARGET: @TARGET@
  32. #
  33. #
  34. # faxsetup [options]
  35. #
  36. # This script interactively prepares and verifies 
  37. # a HylaFAX client and/or server machine for use.
  38. #
  39. PATH=/bin:/usr/bin:/etc
  40. test -d /usr/ucb  && PATH=$PATH:/usr/ucb # Sun and others
  41. test -d /usr/bsd  && PATH=$PATH:/usr/bsd # Silicon Graphics
  42. test -d /usr/5bin && PATH=/usr/5bin:$PATH:/usr/etc # Sun and others
  43. test -d /usr/sbin && PATH=/usr/sbin:$PATH # 4.4BSD-derived
  44. test -d /usr/local/bin && PATH=$PATH:/usr/local/bin # for GNU tools
  45. test -d /usr/gnu/bin && PATH=$PATH:/usr/gnu/bin # for GNU tools (SCO)
  46. AWK=@AWK@ # awk for use below
  47. CAT=@CAT@ # cat command for use below
  48. CHGRP=@CHGRP@ # change file group for use below
  49. CHMOD=@CHMOD@ # change file mode for use below
  50. CHOWN=@CHOWN@ # change file owner for use below
  51. CP=@CP@ # cp command for use below
  52. ECHO=@ECHO@ # echo command for use below
  53. ENCODING=@ENCODING@ # encoding style for uuencode/mimencode
  54. FILECMD=@FILECMD@ # command for determining filetypes
  55. FUSER=@FUSER@ # fuser command to dump in setup.cache
  56. GREP=@GREP@ # grep command for use below
  57. LN=@LN@ # ln command for use below
  58. LN_S=@LN_S@ # ln option for creating a symbolic link
  59. MIMENCODE=@MIMENCODE@ # mimencode command to dump in setup.cache
  60. MKFIFO=@MKFIFO@ # FIFO creation program for use below
  61. MV=@MV@ # move file for use below
  62. PCL6CMD=@PCL6CMD@ # pcl6 (GhostPCL) program
  63. RMCMD=@RM@ # remove file for use below
  64. SCRIPT_SH=@SCRIPT_SH@ # shell for use below
  65. SED=@SED@ # sed for use below
  66. TIFF2PDF=@TIFF2PDF@ # tiff-to-pdf conversion tool
  67. TTYCMD=@TTYCMD@ # tty for error output
  68. UUENCODE=@UUENCODE@ # uuencode command to dump in setup.cache
  69. FAX=@FAXUID@ # identity of the fax user
  70. SERVICES=/etc/services # location of services database
  71. INETDCONF=/usr/etc/inetd.conf # default location of inetd configuration file
  72. ALIASES=/usr/lib/aliases # default location of mail aliases database file
  73. PASSWD=/etc/passwd # where to go for password entries
  74. PROTOUID=@FAXUID@ # user who's uid we use for FAX user
  75. defPROTOUID=3 # use this uid if PROTOUID doesn't exist
  76. GROUP=/etc/group # where to go for group entries
  77. PROTOGID=@FAXGID@ # group who's gid we use for FAX user
  78. defPROTOGID=10 # use this gid if PROTOGID doesn't exist
  79. VERSION="@VERSION@" # configured version
  80. DATE="@DATE@" # data software was configured
  81. TARGET="@TARGET@" # configured target
  82. PATH_AFM=@FONTPATH@ # directory for Adobe Font Metric files
  83. DIR_BIN=@BIN@ # directory for client applications
  84. DIR_LIBDATA=@LIBDATA@ # directory for client data files
  85. DIR_LIBEXEC=@LIBEXEC@ # directory where servers are located
  86. DIR_LOCKS=@UUCP_LOCKDIR@ # UUCP locking directory
  87. DIR_MAN=@MANDIR@ # directory for manual pages
  88. DIR_SBIN=@SBIN@ # directory for server applications
  89. DIR_SPOOL=@SPOOL@ # top of fax spooling tree
  90. TIFFBIN=@TIFFBIN@ # TIFF tools
  91. LOCKS=@UUCP_LOCKTYPE@ # UUCP lock type
  92. PATH_GETTY=@PATHGETTY@ # pathname for getty program
  93. PATH_SENDMAIL=@SENDMAIL@ # pathname for sendmail
  94. PATH_VGETTY=@PATHVGETTY@ # pathname for voice getty program
  95. PATH_EGETTY=@PATHEGETTY@ # pathname for external getty program
  96. PS=@PSPACKAGE@ # default PostScript RIP package
  97. PATH_GSRIP=@GSRIP@ # pathname of Ghostscript RIP
  98. PATH_DPSRIP=@DPSRIP@ # pathname of old IRIX DPS RIP
  99. PATH_IMPRIP=@IMPRIP@ # pathname of IRIX Impressario RIP
  100. POSIXLY_CORRECT=1; export POSIXLY_CORRECT # disable GNU extensions
  101. #
  102. # Location of sysv init script
  103. #
  104. DIR_SYSVINIT=@SYSVINITDIR@
  105. FAXQ_SERVER=@FAXQ_SERVER@
  106. HFAXD_SERVER=@HFAXD_SERVER@
  107. HFAXD_SNPP_SERVER=@HFAXD_SNPP_SERVER@
  108. #
  109. # These are the configuration parameters written to the
  110. # setup.cache file and read in by all the HylaFAX scripts.
  111. #
  112. # We use the same names used by configure for consistency
  113. # (but some confusion within this script).
  114. #
  115. VARS="SCRIPT_SH
  116. FONTPATH PATH_AFM
  117. AWK
  118. BIN DIR_BIN
  119. CAT
  120. CHGRP
  121. CHMOD
  122. CHOWN
  123. CP
  124. DPSRIP PATH_DPSRIP
  125. ECHO
  126. ENCODING
  127. FAXQ_SERVER
  128. FILECMD
  129. FUSER
  130. GREP
  131. GSRIP PATH_GSRIP
  132. HFAXD_SERVER
  133. HFAXD_SNPP_SERVER
  134. IMPRIP PATH_IMPRIP
  135. LIBDATA DIR_LIBDATA
  136. LIBEXEC DIR_LIBEXEC
  137. LN
  138. MANDIR DIR_MAN
  139. MIMENCODE
  140. MKFIFO
  141. MV
  142. PATH
  143. PATHGETTY PATH_GETTY
  144. PATHVGETTY PATH_VGETTY
  145. PATHEGETTY PATH_EGETTY
  146. PCL6CMD
  147. PSPACKAGE PS
  148. RM RMCMD
  149. SBIN DIR_SBIN
  150. SED
  151. SENDMAIL PATH_SENDMAIL
  152. SPOOL DIR_SPOOL
  153. SYSVINIT
  154. TIFF2PDF
  155. TIFFBIN
  156. TARGET
  157. TTYCMD
  158. UUENCODE
  159. UUCP_LOCKDIR DIR_LOCKS
  160. UUCP_LOCKTYPE LOCKS"
  161. dumpvals()
  162. {
  163.     echo "$VARS" |
  164. while read a b; do eval c=$${b:-$a}; echo "$a='$c'"; done
  165. }
  166. #
  167. # Find the full pathname of an executable;
  168. # supply a default if nothing is found.
  169. #
  170. findAppDef()
  171. {
  172.     app=$1; path=$2; def=$3
  173.     case $app in
  174.     /*) test -x $app && { echo $app; return; };;
  175.     esac
  176.     IFS=:
  177.     for i in $path; do
  178. test -x $i/$app && { echo $i/$app; return; }
  179.     done
  180.     echo $def
  181. }
  182. #
  183. # Error diagnostics that should go to the terminal are
  184. # done with this interface or cat.
  185. #
  186. bitch()
  187. {
  188.     echo "$@" 1>&2
  189. }
  190. #
  191. # This is the preferred interface for
  192. # configure to terminate abnormally.
  193. #
  194. boom()
  195. {
  196.     $RM $JUNK
  197.     # boom can be called before TMPDIR is set
  198.     if test x$TMPDIR != x; then
  199. $RM -r $TMPDIR
  200.     fi
  201.     exit 1
  202. }
  203. usage()
  204. {
  205.     cat<<EOF
  206. Usage: faxsetup [options] [host]
  207. Options: [defaults in brackets after descriptions]
  208.   -client  setup client support
  209.   -server  setup server support
  210.   -with-PARAM[=ARG]      set configuration PARAM [ARG=yes]
  211.   -help                  print this message
  212.   -quiet                 do not print 'Using ...' messages
  213.   -verbose  opposite of -quiet
  214.   -nointeractive         assume defaults for all prompts
  215. EOF
  216. }
  217. QUIET=no
  218. INTERACTIVE=yes
  219. AREACODE=000
  220. isServer=no
  221. isClient=no
  222. onClient()
  223. {
  224.     test $isClient = yes
  225. }
  226. onServer()
  227. {
  228.     test $isServer = yes
  229. }
  230. #
  231. # Crack command line arguments.  We purposely
  232. # use syntax and options that are compatible
  233. # with GNU autoconf.
  234. #
  235. WITHARGS=no
  236. ac_prev=
  237. for ac_option
  238. do
  239.     if [ -n "$ac_prev" ]; then # assign the argument to previous option
  240. eval "$ac_prev=$ac_option"
  241. ac_prev=
  242. continue
  243.     fi
  244.     case "$ac_option" in # collect optional argument
  245.     -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'`;;
  246.     *) ac_optarg=;;
  247.     esac
  248.     case "$ac_option" in
  249.     -with-*|--with-*)
  250. ac_with=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
  251. # Reject names that are not valid shell variable names.
  252. if [ -n "`echo $ac_with| sed 's/[-_a-zA-Z0-9]//g'`" ]; then
  253.     bitch "configure: $ac_with: invalid parameter name."
  254.     boom
  255. fi
  256. ac_with=`echo $ac_with| sed 's/-/_/g'`
  257. case "$ac_option" in
  258. *=*) ;;
  259. *) ac_optarg=yes;;
  260. esac
  261. eval "${ac_with}='$ac_optarg'"
  262. WITHARGS=yes
  263. ;;
  264.     -client) isClient=yes;;
  265.     -server) isServer=yes;;
  266.     -quiet) QUIET=yes;;
  267.     -nointeractive) INTERACTIVE=no;;
  268.     -verbose) QUIET=no;;
  269.     -help) usage; exit 0;;
  270.     -*)
  271. bitch "faxsetup: $ac_option: invalid option; use -help for usage."
  272. boom
  273. ;;
  274.     esac
  275. done
  276. if [ -n "$ac_prev" ]; then
  277.     bitch "faxsetup: missing argument to --`echo $ac_prev | sed 's/_/-/g'`"
  278.     boom
  279. fi
  280. # if nothing specified on command line, default client+server
  281. if [ $isClient = no ] && [ $isServer = no ]; then
  282.     isClient=yes
  283.     isServer=yes
  284. fi
  285. #
  286. # Descriptor usage:
  287. # 1: ???
  288. # 2: messages that should be seen even if we're in the background.
  289. # 3: [stdout from test runs]
  290. # 4: verbose-style messages (Using ...)
  291. # 5: setup.cache file
  292. #
  293. if [ $QUIET = yes ]; then
  294.     exec 4>/dev/null # chuck messages
  295. else
  296.     exec 4>&1 # messages go to stdout
  297. fi
  298. Note()
  299. {
  300.     echo "$@" 1>&4
  301. }
  302. capture()
  303. {
  304.     (eval "set -x; $*") > /dev/null 2>&1
  305.     return
  306. }  
  307. Note ""
  308. Note "Setup program for HylaFAX (tm) $VERSION."
  309. Note ""
  310. Note "Created for $TARGET on $DATE."
  311. Note ""
  312. CPU=`expr $TARGET : '([^-]*)'` || CPU=unknown
  313. VENDOR=`expr $TARGET : '[^-]*-([^-]*)'` || VENDOR=unknown
  314. OS=`expr $TARGET : '[^-]*-[^-]*-([a-zA-Z]*).*'` || OS=unknown
  315. RELEASE=`(uname -r) 2>/dev/null` || RELEASE=unknown
  316. #
  317. # Read in any site, target, vendor, os, or os-release
  318. # specific setup work.  Note that we read stuff here
  319. # so that configuration parameters can be altered.  We
  320. # use some pre-defined function names below to provide
  321. # hooks for other actions.
  322. #
  323. #
  324. # Hooks for additional client+server checks
  325. #
  326. otherBasicServerChecks()
  327. {
  328.     true
  329. }
  330. otherBasicClientChecks()
  331. {
  332.     true
  333. }
  334. #
  335. # Hook for adding stuff to setup.modem
  336. #
  337. dumpOtherModemFuncs()
  338. {
  339.     true
  340. }
  341. #
  342. # Figure out which brand of echo we have and define prompt
  343. # and printf shell functions accordingly.  Note that we
  344. # assume that if the System V-style echo is not present,
  345. # then the BSD printf program is available.  These functions
  346. # are defined here so that they can be tailored on a per-site,
  347. # etc. basis.
  348. #
  349. if [ `echo foo\c`@ = "foo@" ]; then
  350.     # System V-style echo supports r
  351.     # and c which is all that we need
  352.     prompt()
  353.     {
  354.        echo "$* \c"
  355.     }
  356.     printf()
  357.     {
  358.        echo "$*\c"
  359.     }
  360.     dumpPromptFuncs()
  361.     {
  362. cat<<-'EOF'
  363. prompt()
  364. {
  365.    echo "$* \c"
  366. }
  367. printf()
  368. {
  369.    echo "$*\c"
  370. }
  371. EOF
  372.     }
  373. elif [ "`echo -n foo`@" = "foo@" ]; then
  374.     # BSD-style echo; use echo -n to get
  375.     # a line without the trailing newline
  376.     prompt()
  377.     {
  378.        echo -n "$* "
  379.     }
  380.     dumpPromptFuncs()
  381.     {
  382. cat<<-'EOF'
  383. prompt()
  384. {
  385.    echo -n "$* "
  386. }
  387. EOF
  388.     }
  389. else
  390.     # something else; do without
  391.     prompt()
  392.     {
  393. echo "$*"
  394.     }
  395.     dumpPromptFuncs()
  396.     {
  397. cat<<-'EOF'
  398. prompt()
  399. {
  400.     echo "$*"
  401. }
  402. EOF
  403.     }
  404. fi
  405. if onServer; then
  406.     #
  407.     # Setup the password file manipulation functions according
  408.     # to whether we have System-V style support through the
  409.     # passmgmt program, or BSD style support through the chpass
  410.     # program, or for SCO boxes through pwconv, or SVR4 style support
  411.     # through useradd. If none are found, we setup functions that
  412.     # will cause us to abort if we need to munge the password file.
  413.     #
  414.     # NB: some systems override these function definitions through
  415.     #     per-os faxsetup files
  416.     #
  417.     if [ -f /bin/passmgmt ] || [ -f /usr/sbin/passmgmt ]; then
  418. addPasswd()
  419. {
  420.     passmgmt -o -a -c 'Facsimile Agent' -h $4 -u $2 -g $3 $1
  421. }
  422. deletePasswd()
  423. {
  424.     passmgmt -d $1
  425. }
  426. modifyPasswd()
  427. {
  428.     passmgmt -m -h $4 -u $2 -o -g $3 $1
  429. }
  430. lockPasswd()
  431. {
  432.     passwd -l $1
  433. }
  434.     elif [ -f /usr/bin/chpass ]; then
  435. addPasswd()
  436. {
  437.     chpass -a "$1:*:$2:$3::0:0:Facsimile Agent:$4:"
  438. }
  439. modifyPasswd()
  440. {
  441.     chpass -a "$1:*:$2:$3::0:0:Facsimile Agent:$4:"
  442. }
  443. lockPasswd()
  444. {
  445.     return 0 # entries are always locked
  446. }
  447.     elif [ -f /etc/pwconv ]; then # could be a SCO box
  448. addPasswd()
  449. {
  450.     echo "${1}:NOLOGIN:${2}:${3}:Facsimile Agent:${4}:/bin/false" >> ${PASSWD}
  451.     /etc/pwconv
  452. }
  453. lockPasswd()
  454. {
  455.     return 0 # entries are always locked
  456. }
  457. modifyPasswd()
  458. {
  459.     OLD_HOME=`grep "^${1}:" ${PASSWD} | awk -F: '{print $6}'`
  460.     ed - $PASSWD <<_EOF
  461. g~^$1:~s~${OLD_HOME}~$4~
  462. w
  463. q
  464. _EOF
  465. }
  466.     elif [ -f /usr/sbin/useradd ] || [ -f /etc/useradd ]; then
  467. addPasswd()
  468. {
  469.     useradd -c 'Facsimile Agent' -d $4 -u $2 -o -g $3 $1
  470. }
  471. deletePasswd()
  472. {
  473.     userdel $1
  474. }
  475. modifyPasswd()
  476. {
  477.     usermod -m -d $4 -u $2 -o -g $3 $1
  478. }
  479. lockPasswd()
  480. {
  481.     passwd -l $1
  482. }
  483.     else
  484. addPasswd()
  485. {
  486.     cat >&2 <<EOF
  487. FATAL ERROR: I don't know how to add a passwd entry!
  488. You will have to create the password entry manually using the following info:
  489. Login Name: $1
  490. Password:   *
  491. Uid:        $2
  492. Gid:        $3
  493. Full Name:  Facsimile Agent
  494. Home Dir:   $4
  495. EOF
  496.     boom
  497. }
  498. modifyPasswd()
  499. {
  500.     cat >&2 <<EOF
  501. FATAL ERROR: I don't know how to modify a passwd entry!
  502. You will have to update the password entry manually using the following info:
  503. Login Name: $1
  504. Password:   *
  505. Uid:        $2
  506. Gid:        $3
  507. Full Name:  Facsimile Agent
  508. Home Dir:   $4
  509. EOF
  510.     boom
  511. }
  512.     fi
  513.     #
  514.     # Functions required by faxaddmodem.
  515.     #
  516.     case $TARGET in
  517.     *-sunos*|*-linux*|*-ultrix*|*-hpux*|*-freebsd*|*-netbsd*|*-sysv5*)
  518. dumpTTYFuncs()
  519. {
  520.     cat<<'EOF'
  521.     ttyPort()
  522.     {
  523. expr $1 : 'tty(.*)'
  524.     }
  525.     ttyLocks()
  526.     {
  527. echo $UUCP_LOCKDIR/LCK..`expr /$1 : '.*/(.*)'`
  528.     }
  529.     ttyAliases()
  530.     {
  531. if [ -z "`echo $1 | grep "^/"`" ]; then printf "/dev/"; fi
  532. echo $1
  533.     }
  534.     ttyDev()
  535.     {
  536. if [ -z "`echo $1 | grep "^/"`" ]; then printf "/dev/"; fi
  537. echo $1
  538.     }
  539.     checkPort()
  540.     {
  541.  return
  542.     }
  543. EOF
  544. }
  545. ;;
  546.     *-svr4*|*-sysv4*|*-solaris*)
  547. dumpTTYFuncs()
  548. {
  549.     cat<<'EOF'
  550.     ttyPort()
  551.     {
  552. port=`expr $1 : 'term/(.*)' | $1` # Usual
  553. port=`expr $port : 'cua/(.*)' | $port` # Solaris
  554. port=`expr $port : 'tty(.*)' | $port` # Old-style
  555. echo $port
  556.     }
  557.     ttyLocks()
  558.     {
  559. devs=$1
  560. locks="$UUCP_LOCKDIR/`$SVR4UULCKN /dev/$devs`" || {
  561.     echo "Sorry, I cannot determine the UUCP lock file name for $devs"
  562.     exit 1
  563. }
  564. echo $locks
  565.     }
  566.     ttyAliases()
  567.     {
  568. if [ -z "`echo $1 | grep "^/"`" ]; then printf "/dev/"; fi
  569. echo $1
  570.     }
  571.     ttyDev()
  572.     {
  573. if [ -z "`echo $1 | grep "^/"`" ]; then printf "/dev/"; fi
  574. echo $1
  575.     }
  576.     checkPort()
  577.     {
  578.  return
  579.     }
  580. EOF
  581. }
  582. ;;
  583.     *)
  584. dumpTTYFuncs()
  585. {
  586.     Note ""
  587.     Note "Beware, I am guessing the tty naming conventions for your system."
  588.     cat<<'EOF'
  589.     ttyPort()
  590.     {
  591. expr $1 : 'tty(.*)'
  592.     }
  593.     ttyLocks()
  594.     {
  595. echo $UUCP_LOCKDIR/LCK..`expr /$1 : '.*/(.*)'`
  596.     }
  597.     ttyAliases()
  598.     {
  599. if [ -z "`echo $1 | grep "^/"`" ]; then printf "/dev/"; fi
  600. echo $1
  601.     }
  602.     ttyDev()
  603.     {
  604. if [ -z "`echo $1 | grep "^/"`" ]; then printf "/dev/"; fi
  605. echo $1
  606.     }
  607.     checkPort()
  608.     {
  609.  return
  610.     }
  611. EOF
  612. }
  613. ;;
  614.     esac
  615.     case $TARGET in
  616.     *-*bsd*)
  617. dumpSTTYFuncs()
  618. {
  619.     cat<<EOF
  620.     ttyStty()
  621.     {
  622. echo $STTYCMD -f $tdev
  623.     }
  624.     ttySpeeds()
  625.     {
  626. speeds=
  627. if [ -z "$SPEED" ]; then
  628.     for s in 38400 19200 9600 4800 2400 1200; do
  629. $STTYCMD -f $tdev $s </dev/null >/dev/null 2>&1 && speeds="$speeds $s"
  630.     done
  631. fi
  632. echo $speeds
  633.     }
  634. EOF
  635. }
  636. ;;
  637.     *)
  638. dumpSTTYFuncs()
  639. {
  640.     cat<<EOF
  641.     ttyStty()
  642.     {
  643. echo $STTYCMD
  644.     }
  645.     ttySpeeds()
  646.     {
  647. speeds=
  648. if [ -z "$SPEED" ]; then
  649.     for s in 38400 19200 9600 4800 2400 1200; do
  650. onDev $STTYCMD $s </dev/null >/dev/null 2>&1 && speeds="$speeds $s"
  651.     done
  652. fi
  653. echo $speeds
  654.     }
  655. EOF
  656. }
  657. ;;
  658.     esac
  659.     machdepPasswdWork()
  660.     {
  661. true
  662.     }
  663.     #
  664.     # Default values for new scheduler config files
  665.     #
  666.     defaultLogFacility=daemon
  667.     defaultCountryCode=1
  668.     defaultAreaCode=$AREACODE
  669.     defaultLongDistancePrefix=1
  670.     defaultInternationalPrefix=011
  671.     defaultDialStringRules="etc/dialrules"
  672.     defaultServerTracing=1
  673.     defaultContCoverPage=
  674.     defaultContCoverCmd="bin/mkcover"
  675.     defaultMaxConcurrentCalls=1
  676.     defaultMaxDials=12
  677.     defaultMaxSendPages=0xffffffff
  678.     defaultMaxTries=3
  679.     defaultModemGroup=
  680.     defaultPostScriptTimeout=180
  681.     defaultPS2FaxCmd="bin/ps2fax"
  682.     defaultSendFaxCmd="bin/faxsend"
  683.     defaultSendPageCmd="bin/pagesend"
  684.     defaultSendUUCPCmd="bin/uucpsend"
  685.     defaultSessionTracing=0xFFF
  686.     defaultTimeOfDay="Any"
  687.     defaultUse2D=Yes
  688.     defaultNotifyCmd="bin/notify"
  689.     defaultUUCPLockDir="$DIR_LOCKS"
  690.     defaultUUCPLockTimeout=30
  691.     defaultUUCPLockType="$LOCKS"
  692. fi
  693. CONFIG_FILES=
  694. if [ -f $DIR_SBIN/faxsetup.local ]; then
  695.     . $DIR_SBIN/faxsetup.local
  696.     CONFIG_FILES="$CONFIG_FILES $DIR_SBIN/faxsetup.local"
  697. elif [ -f $DIR_SBIN/faxsetup.${CPU}-${VENDOR}-${OS}${RELEASE} ]; then
  698.     . $DIR_SBIN/faxsetup.${CPU}-${VENDOR}-${OS}${RELEASE}
  699.     CONFIG_FILES="$CONFIG_FILES $DIR_SBIN/faxsetup.${CPU}-${VENDOR}-${OS}${RELEASE}"
  700. elif [ -f $DIR_SBIN/faxsetup.${VENDOR}-${OS}${RELEASE} ]; then
  701.     . $DIR_SBIN/faxsetup.${VENDOR}-${OS}${RELEASE}
  702.     CONFIG_FILES="$CONFIG_FILES $DIR_SBIN/faxsetup.${VENDOR}-${OS}${RELEASE}"
  703. elif [ -f $DIR_SBIN/faxsetup.${CPU}-${VENDOR}-${OS} ]; then
  704.     . $DIR_SBIN/faxsetup.${CPU}-${VENDOR}-${OS}
  705.     CONFIG_FILES="$CONFIG_FILES $DIR_SBIN/faxsetup.${CPU}-${VENDOR}-${OS}"
  706. elif [ -f $DIR_SBIN/faxsetup.${VENDOR}-${OS} ]; then
  707.     . $DIR_SBIN/faxsetup.${VENDOR}-${OS}
  708.     CONFIG_FILES="$CONFIG_FILES $DIR_SBIN/faxsetup.${VENDOR}-${OS}"
  709. elif [ -f $DIR_SBIN/faxsetup.${CPU}-${VENDOR} ]; then
  710.     . $DIR_SBIN/faxsetup.${CPU}-${VENDOR}
  711.     CONFIG_FILES="$CONFIG_FILES $DIR_SBIN/faxsetup.${CPU}-${VENDOR}"
  712. elif [ -f $DIR_SBIN/faxsetup.${VENDOR} ]; then
  713.     . $DIR_SBIN/faxsetup.${VENDOR}
  714.     CONFIG_FILES="$CONFIG_FILES $DIR_SBIN/faxsetup.${VENDOR}"
  715. elif [ -f $DIR_SBIN/faxsetup.${OS} ]; then
  716.     . $DIR_SBIN/faxsetup.${OS}
  717.     CONFIG_FILES="$CONFIG_FILES $DIR_SBIN/faxsetup.${OS}"
  718. fi
  719. #
  720. # Flush cached values if something was specified on the
  721. # command line 
  722. #
  723. if onServer; then
  724.     REASON=
  725.     if [ $WITHARGS = yes ]; then 
  726. REASON="of command line parameters"
  727.     elif [ "$CONFIG_FILES" ]; then
  728. REASON=`find $CONFIG_FILES -newer $DIR_SPOOL/etc/setup.cache -print 2>/dev/null`
  729. test "$REASON" && REASON="$REASON has been updated"
  730.     fi
  731.     if [ "$REASON" ] && [ -f $DIR_SPOOL/etc/setup.cache ]; then
  732.        Note "Flushing cached parameters because $REASON."
  733.        Note ""
  734.        rm -f $DIR_SPOOL/etc/setup.cache
  735.     fi
  736.     if [ -f $DIR_SPOOL/etc/setup.cache ]; then
  737. Note "Reading cached parameters from $DIR_SPOOL/etc/setup.cache."
  738. Note ""
  739. . $DIR_SPOOL/etc/setup.cache
  740.     fi
  741. fi
  742. #
  743. # Double-check these settings...
  744. #
  745. if [ ! -x "$TIFF2PDF" ] || [ "$TIFF2PDF" = "bin/tiff2pdf" ]; then
  746.     TIFF2PDF=`findAppDef tiff2pdf $PATH bin/tiff2pdf`
  747.     if [ "$TIFF2PDF" != "bin/tiff2pdf" ]; then
  748. test -x "$TIFF2PDF" && Note "Found converter: $TIFF2PDF"
  749.     fi
  750. fi
  751. test -x "$PCL6CMD" || {
  752.     PCL6CMD=`findAppDef pcl6 $PATH pcl6`
  753.     test -x "$PCL6CMD" && Note "Found PCL converter: $PCL6CMD"
  754. }
  755. test -x "$MIMENCODE" || {
  756.     MIMENCODE=`findAppDef mimencode $PATH mimencode`
  757.     test -x "$MIMENCODE" || {
  758. MIMENCODE=`findAppDef base64-encode $PATH base64-encode`
  759. test -x "$MIMENCODE" || {
  760.     MIMENCODE=`findAppDef base64 $PATH base64`
  761. }
  762.     }
  763.     test -x "$MIMENCODE" && Note "Found encoder: $MIMENCODE"
  764. }
  765. test -x "$UUENCODE" || {
  766.     UUENCODE=`findAppDef uuencode $PATH uuencode`
  767.     test -x "$UUENCODE" || {
  768. UUENCODE=`findAppDef gmime-uuencode $PATH gmime-uuencode`
  769.     }
  770.     test -x "$UUENCODE" && Note "Found encoder: $UUENCODE"
  771. }
  772. if [ -x "$MIMENCODE" ]; then
  773.     if [ "$ENCODING" != "base64" ]; then
  774. ENCODING=base64
  775. Note "Looks like $MIMENCODE supports base64 encoding."
  776.     fi
  777. elif [ -x "$UUENCODE" ]; then
  778.     if capture "$UUENCODE -m $PASSWD foo"; then
  779. if [ "$ENCODING" != "base64" ]; then
  780.     ENCODING=base64
  781.     Note "Looks like $UUENCODE supports base64 encoding."
  782. fi
  783.     else
  784. if [ "$ENCODING" != "x-uuencode" ]; then
  785.     ENCODING=x-uuencode
  786.     Note "Looks like $UUENCODE does not support base64 encoding."
  787. fi
  788.     fi
  789. fi
  790. RM="$RMCMD -f" # remove file for use below
  791. #
  792. # Deduce the effective user id:
  793. #   1. POSIX-style, the id program
  794. #   2. the old whoami program
  795. #   3. last gasp, check if we have write permission on /dev
  796. #
  797. euid=`id|$SED -e 's/.*uid=[0-9]*(([^)]*)).*/1/'`
  798. test -z "$euid" && euid=`(whoami) 2>/dev/null`
  799. test -z "$euid" && test -w /dev && euid=root
  800. if [ "$euid" != "root" ]; then
  801.     bitch "Sorry, but you must run this script as the super-user!"
  802.     boom
  803. fi
  804. onClient && Note "Checking system for proper client configuration."
  805. onServer && Note "Checking system for proper server configuration."
  806. #
  807. # Verify configuration parameters are correct.
  808. #
  809. dirMisConfigured()
  810. {
  811.    cat >&2 <<EOF
  812. FATAL ERROR: $1 does not exist or is not a directory!
  813. The directory $1 does not exist or this file is not a directory.  If
  814. the HylaFAX software is not yet installed you must do so before running
  815. this script.  If the software is installed but is configured for use in
  816. a different location than this script expects then the software will not
  817. function correctly.
  818. EOF
  819.    boom
  820. }
  821. #
  822. # Check basic spooling area setup.
  823. #
  824. if onServer; then
  825.     test -d $DIR_SPOOL || {
  826. cat >&2 <<-EOF
  827. FATAL ERROR: $DIR_SPOOL does not exist or is not a directory!
  828. The HylaFAX spooling area $DIR_SPOOL does not exist or this file is
  829. not a directory.  If the HylaFAX software is not yet installed you
  830. must do so before running this script.  If the software is installed
  831. but is configured for use in a different location than this script
  832. expects then you may override the default pathname by running this
  833. script with a -with-DIR_SPOOL option; e.g.
  834. faxsetup -with-DIR_SPOOL=/var/spool/someplace_unexpected
  835. EOF
  836. boom
  837.     }
  838.     cd $DIR_SPOOL
  839.     DIRS="archive bin client config dev docq doneq etc info log
  840. pollq recvq sendq status tmp"
  841.     for i in $DIRS; do
  842. test -d $i || dirMisConfigured $DIR_SPOOL/$i
  843.     done
  844.     #
  845.     # XXX should check permission and ownership of sensitive dirs
  846.     #
  847.     # Setup TMPDIR before anything can trap and rm it
  848.     TMPDIR=`(mktemp -d /tmp/.faxsetup.XXXXXX) 2>/dev/null`
  849.     if test x$TMPDIR = x; then
  850. TMPDIR=/tmp/.faxsetup$$
  851.     fi
  852.     $RM -rf $TMPDIR
  853.     (umask 077 ; mkdir $TMPDIR) || exit 1
  854.     JUNK="etc/setup.tmp"
  855.     trap "$RM $JUNK; $RM -r $TMPDIR; exit 1" 1 2 15
  856.     exec 5>etc/setup.tmp
  857.     echo '# Warning, this file was automatically generated by faxsetup' >&5
  858.     echo '# on' `date` "for ${USER:-$euid}" >&5
  859. fi
  860. #
  861. # Basic client installation.
  862. #
  863. if onClient; then
  864.     test -d $DIR_BIN  || dirMisConfigured $DIR_BIN
  865.     for file in sendfax sendpage faxstat faxalter faxcover faxmail faxrm; do
  866. test -x $DIR_BIN/$file || {
  867.     cat >&2 <<EOF
  868. FATAL ERROR: $DIR_BIN/$file is not an executable program!
  869. The file $DIR_BIN/$file does not exist or this file is not
  870. an executable program.  If the HylaFAX software is not yet installed you
  871. must do so before running this script.  If the software is installed but
  872. is configured for use in a different location than this script expects
  873. then the software will not function correctly.
  874. EOF
  875.    boom
  876. }
  877.     done
  878.     test -d $DIR_LIBDATA || dirMisConfigured $DIR_LIBDATA
  879.     for file in pagesizes faxcover.ps typerules; do
  880. test -f $DIR_LIBDATA/$file || {
  881.     cat >&2 <<EOF
  882. FATAL ERROR: $DIR_LIBDATA/$file does not exist!
  883. The file $DIR_LIBDATA/$file does not exist.  If the HylaFAX
  884. software is not yet installed you must do so before running this script.
  885. If the software is installed but is configured for use in a different
  886. location than this script expects then the software will not function
  887. correctly.
  888. EOF
  889.    boom
  890. }
  891.     done
  892.     test -d $DIR_LIBEXEC || dirMisConfigured $DIR_LIBEXEC
  893.     for file in textfmt; do
  894. test -f $DIR_LIBEXEC/$file || {
  895.     cat >&2 <<EOF
  896. FATAL ERROR: $DIR_LIBEXEC/$file does not exist!
  897. The file $DIR_LIBEXEC/$file does not exist.  If the HylaFAX
  898. software is not yet installed you must do so before running this script.
  899. If the software is installed but is configured for use in a different
  900. location than this script expects then the software will not function
  901. correctly.
  902. EOF
  903.    boom
  904. }
  905.     done
  906.     otherBasicClientChecks
  907. fi
  908. #
  909. # Server setup other than the spooling area.
  910. #
  911. if onServer; then
  912.     test -d $DIR_LIBEXEC || dirMisConfigured $DIR_LIBEXEC
  913.     test -d $DIR_SBIN  || dirMisConfigured $DIR_SBIN
  914.     test -d $DIR_LOCKS   || {
  915.        cat >&2 <<EOF
  916. FATAL ERROR: $DIR_LOCKS does not exist or is not a directory!
  917. The UUCP lockfile directory is not where it is expected or this file
  918. is not a directory.  It is possible to configure the HylaFAX software
  919. to use a directory other than the configured one by setting up the
  920. UUCPLockDir configuration parameter in each configuration file in the
  921. $DIR_SPOOL/etc directory, but this is potentially error-prone.
  922. Your best bet is to either create a symbolic link for the expected
  923. pathname or reconfigure HylaFAX with the correct pathname and build
  924. a new distribution.
  925. EOF
  926. boom
  927.     }
  928.     test -d $TIFFBIN || {
  929. cat >&2 <<EOF
  930. FATAL ERROR: $TIFFBIN does not exist or is not a directory!
  931. The directory of tools from the TIFF software distribution is not
  932. where it is expected or this file is not a directory.  If you do not
  933. have the TIFF distribution installed on this machine then you must
  934. install it; the master FTP location is ftp://ftp.sgi.com/graphics/tiff.
  935. Otherwise, if the software is installed in a directory other than
  936. where it is expected you can configure the HylaFAX software to use
  937. an alternate directory by supplying a -with-TIFFBIN option when running
  938. this script; e.g. faxsetup -with-TIFFBIN=someplace_nonstandard.
  939. EOF
  940. boom
  941.     }
  942.     for file in tiffcp tiff2ps fax2ps tiffinfo; do
  943. test -x $TIFFBIN/$file || {
  944.     cat >&2 <<EOF
  945. FATAL ERROR: $TIFFBIN/$file does not exist or is not an executable program!
  946. The program $TIFFBIN/$file is not where it is expected or the file
  947. is not executable.  This program is part of the TIFF software
  948. distribution that is required for use with HylaFAX.  If you do not
  949. have the TIFF distribution installed on this machine then you must
  950. install it; the master FTP location is ftp://ftp.sgi.com/graphics/tiff.
  951. Otherwise, if the software is installed in a directory other than
  952. where it is expected you can configure the HylaFAX software to use
  953. an alternate directory by supplying a -with-TIFFBIN option when running
  954. this script; e.g.  faxsetup -with-TIFFBIN=someplace_nonstandard.
  955. EOF
  956.     boom
  957. }
  958.     done
  959.     otherBasicServerChecks
  960. fi
  961. #
  962. # Quick check to see if the manual pages are installed;
  963. # perhaps not even worth the effort.
  964. #
  965. test -d $DIR_MAN || {
  966.     cat >&4 <<EOF
  967. Warning: $DIR_MAN does not exist or is not a directory!
  968. The directory for manual pages does not exist or is not a directory.
  969. If this directory does not exist because the manual pages have not been
  970. installed then you can ignore this message.  Otherwise you may want to
  971. check out what happened to the manual pages.
  972. EOF
  973. }
  974. #
  975. # Utility program parameters.
  976. #
  977. appMisConfigured()
  978. {
  979.    cat >&2 <<EOF
  980. FATAL ERROR: $1 does not exist or is not an executable program!
  981. The file:
  982.     $1
  983. does not exist or this file is not an executable program.  The HylaFAX
  984. software expects this program to exist and be in this location.  If the
  985. program resides in a different location then you must either reconfigure
  986. and rebuild HylaFAX or override the default pathnames in the distributed
  987. software through one of the HylaFAX configuration files (consult the
  988. HylaFAX documentation).
  989. EOF
  990.    boom
  991. }
  992. warnAppMisConfigured()
  993. {
  994.    cat >&2 <<EOF
  995. Warning: $1 does not exist or is not an executable program!
  996. The file:
  997.     $1
  998. does not exist or this file is not an executable program.  The
  999. HylaFAX software optionally uses this program and the fact that
  1000. it does not exist on the system is not a fatal error.  If the
  1001. program resides in a different location and you do not want to
  1002. install a symbolic link for $1 that points to your program
  1003. then you must reconfigure and rebuild HylaFAX from source code.
  1004. EOF
  1005. }
  1006. if onServer; then
  1007.     test -x $PATH_GETTY || warnAppMisConfigured $PATH_GETTY
  1008.     test -x $PATH_VGETTY || warnAppMisConfigured $PATH_VGETTY
  1009.     test -x $PATH_EGETTY || warnAppMisConfigured $PATH_EGETTY
  1010.     for i in $CAT $CHGRP $CHMOD $CHOWN $CP $ECHO $GREP $LN $MKFIFO $MV 
  1011. $RMCMD $SED $SENDMAIL; do
  1012. test -x $i || appMisConfigured $i
  1013.     done
  1014.     #
  1015.     # Test/verify we know how to create FIFO special files.
  1016.     #
  1017.     case $MKFIFO in
  1018.     *mknod)
  1019. mkfifo()
  1020. {
  1021.     $MKFIFO $1 p
  1022. }
  1023. ;;
  1024.     *)
  1025. mkfifo()
  1026. {
  1027.     $MKFIFO $1
  1028. }
  1029. ;;
  1030.     esac
  1031.     $RM conffifo; JUNK="$JUNK conffifo"
  1032.     if (mkfifo conffifo && test -p conffifo) >/dev/null 2>&1; then
  1033. true
  1034.     elif test -r conffifo; then # NB: not everyone has test -p
  1035. true
  1036.     else
  1037. cat >&2 <<EOF
  1038. FATAL ERROR: Don't know how to create FIFO special files!
  1039. We were unable to create a FIFO special file using the command:
  1040.      $MKFIFO conffifo
  1041. HylaFAX requires support for FIFO special files and will not function
  1042. without this support.  If your system does not have support for FIFO
  1043. files then reconfigure it to include support (on some systems this
  1044. support is optional and requires recompilation or rebuilding of the
  1045. kernel).  If your system does have support for FIFO files but they are
  1046. not created using the expected program then you will need to reconfigure
  1047. and rebuild HylaFAX from the source distribution or emulate the needed
  1048. functionality (possibly by providing a shell script).
  1049. EOF
  1050. boom
  1051.     fi
  1052. fi
  1053. #
  1054. # AWK support.
  1055. #
  1056. if onServer; then
  1057.     test -x $AWK || appMisConfigured $AWK
  1058.     # awk must support functions and -v
  1059.     CheckAwk()
  1060.     {
  1061. ($1 -v BAR=bar '
  1062.     function foo(x) {
  1063.     print "GOT" x
  1064.     }
  1065.     BEGIN { foo(BAR) }
  1066.     ' </dev/null | grep GOTbar) >/dev/null 2>&1
  1067. return
  1068.     }
  1069.     CheckAwk $AWK || {
  1070. cat >&2 <<EOF
  1071. FATAL ERROR: $AWK does not support needed functionality!
  1072. The following test does not work correctly with the configured awk program.
  1073. ----------------------------------------------------------
  1074. $AWK -v BAR=bar '
  1075. function foo(x) {
  1076. print "GOT" x
  1077. }
  1078. BEGIN { foo(BAR) }
  1079. ' </dev/null | grep GOTbar
  1080. ----------------------------------------------------------
  1081. The HylaFAX software requires an awk program that supports functions and
  1082. the -v option for passing parameters from the command line.  The deficiency
  1083. of $AWK on your system will cause problems in various parts of the HylaFAX
  1084. software.
  1085. If you are running an old version of $AWK then get a more up to date
  1086. version.  Otherwise you can reconfigure HylaFAX from the source distribution
  1087. to force a different awk program to be used or you can, as a last resort,
  1088. try altering the shell scripts that are part of HylaFAX that use $AWK.
  1089. EOF
  1090. boom
  1091.     }
  1092. fi
  1093. #
  1094. # Runtime Fontpath/Fontmap detection
  1095. #
  1096. if onClient; then
  1097. getGSFonts()
  1098. {
  1099. $PATH_GSRIP -h 2>/dev/null | $AWK -F '[ ]' '
  1100. BEGIN { start = 0; }
  1101. /Search path:/ { start = 1 }
  1102. {
  1103. if (start == 1) {
  1104. if ($1 == "") {
  1105. gsub(" ","")
  1106. gsub("^[.]","")
  1107. gsub("^:","")
  1108. printf "%s", $0
  1109. } else if ($1 != "Search") start = 0
  1110. }
  1111. }
  1112. '
  1113. }
  1114. # If configure --with-PATH_AFM=<path> was used then we need to include it first.
  1115. RUNTIME_PATH_AFM=$PATH_AFM:`getGSFonts`
  1116. if [ -n "$RUNTIME_PATH_AFM" 
  1117. -a "$RUNTIME_PATH_AFM" != "$PATH_AFM" ]; then 
  1118.     Note ""
  1119.     Note "Setting Ghostscript font path in $DIR_LIBDATA/hyla.conf."
  1120.     Note ""
  1121.     if [ -f $DIR_LIBDATA/hyla.conf ]; then
  1122. $AWK '!/^FontMap|^FontPath|/FontPath added by/ { print }' 
  1123. $DIR_LIBDATA/hyla.conf > $DIR_LIBDATA/hyla.conf.tmp
  1124.     fi
  1125.     echo "# FontMap/FontPath added by faxsetup (`date 2>/dev/null`)" 
  1126.                                         >> $DIR_LIBDATA/hyla.conf.tmp
  1127.     echo "FontMap:   $RUNTIME_PATH_AFM" >> $DIR_LIBDATA/hyla.conf.tmp
  1128.     echo "FontPath:  $RUNTIME_PATH_AFM" >> $DIR_LIBDATA/hyla.conf.tmp
  1129.     $MV $DIR_LIBDATA/hyla.conf.tmp $DIR_LIBDATA/hyla.conf
  1130.     PATH_AFM=$RUNTIME_PATH_AFM
  1131. fi
  1132. fi
  1133. #
  1134. # Installation of Adobe Font Metric files
  1135. #
  1136. if onClient; then
  1137.     FDIRS=`echo $PATH_AFM | sed "s/:/ /g"`
  1138.     MATCH=
  1139.     for FDIR in $FDIRS; do
  1140.     if [ -d $FDIR ]; then
  1141. cd $FDIR
  1142. if [ -n "`ls | grep '.afm'`" ] || [ -f Courier ]; then
  1143. MATCH=$FDIR
  1144. break
  1145. fi
  1146.     else
  1147. cat >&4 <<EOF
  1148. Warning: $FDIR does not exist or is not a directory!
  1149. The directory $FDIR does not exist or this file is not a directory.
  1150. This is the directory where the HylaFAX client applications expect to
  1151. locate font metric information to use in formatting ASCII text for
  1152. submission as facsimile.  Without this information HylaFAX may generate
  1153. illegible facsimile from ASCII text.
  1154. EOF
  1155.     fi
  1156.     done
  1157.     if [ -z "$MATCH" ];then
  1158.     cat >&4 <<EOF
  1159. Warning: Font metric information files were not found!
  1160. The font metric information file for the Courier font was not found in
  1161. the $PATH_AFM path.  This means that client HylaFAX applications 
  1162. that use this information to format ASCII text for submission as fax will
  1163. use incorrect information and generate potentially illegible facsimile.
  1164. If font metric information is present on your system in a directory other
  1165. than $PATH_AFM then you can setup a symbolic link to the appropriate
  1166. directory or you can specify the appropriate pathname in the configuration
  1167. file $DIR_LIBDATA/hyla.conf with a line of the form:
  1168. FontPath: someplace_unexpected
  1169. If you do not have the font metric information files loaded on your system
  1170. system you can obtain them by public FTP from the place where you obtained
  1171. the HylaFAX software or from the master FTP site at ftp.sgi.com.
  1172. EOF
  1173.      fi
  1174. fi
  1175. #
  1176. # PostScript RIP support.
  1177. #
  1178. if onServer; then
  1179.     cd $DIR_SPOOL
  1180.     case $PS in
  1181.     dps) PATH_PSRIP=$PATH_DPSRIP;;
  1182.     imp) PATH_PSRIP=$PATH_IMPRIP;;
  1183.     gs) PATH_PSRIP=$PATH_GSRIP;;
  1184.     esac
  1185.     if [ -x "$PATH_PSRIP" ]; then
  1186. if [ $PS = gs ]; then
  1187.     # verify Ghostscript was linked with the tiffg3 device driver
  1188.     $PATH_PSRIP -h 2>&1 | grep tiffg3 >/dev/null 2>&1 || {
  1189. cat >&2 <<EOF
  1190. FATAL ERROR: No tiffg3 driver in $PATH_PSRIP.
  1191. HylaFAX has been configured to use Ghostscript as the PostScript
  1192. imaging program but the output of $PATH_PSRIP -h does not
  1193. list the tiffg3 driver as a configured driver (see below).
  1194. ----------------------------------------------------------
  1195. % $PATH_PSRIP -h
  1196. EOF
  1197. $PATH_PSRIP -h
  1198. ----------------------------------------------------------
  1199. cat >&2 <<EOF
  1200. The tiffg3 driver is required for HylaFAX to operate correctly. 
  1201. Consult the documentation for information on building Ghostscript
  1202. with the necessary TIFF driver and then rerun faxsetup when a new
  1203. Ghostscript has been installed.
  1204. EOF
  1205. boom
  1206.     }
  1207. elif [ $PS = dps ]; then
  1208.     JUNK="$JUNK ps.fax"
  1209.     $CAT etc/dpsprinter.ps | $PATH_PSRIP >/dev/null 2>&1
  1210.     if [ $? -eq 2 ]; then
  1211. if expr $RELEASE >= 6.2 >/dev/null; then
  1212.     cat >&2 <<EOF
  1213. FATAL ERROR: No DPS-based RIP available for IRIX $RELEASE!
  1214. The DPS-based PostScript RIP is a COFF executable and cannot be used
  1215. under IRIX $RELEASE.  You must use a different RIP such as fw_gs.sw.gs
  1216. which is found on the SGI Freeware CD-ROM and which is based on the
  1217. freely distributed Ghostscript software package.  This package is
  1218. also included in the binary distribution of HylaFAX for SGI systems
  1219. found on ftp.sgi.com.
  1220. Once you have installed the Ghostscript distribution rerun faxsetup
  1221. with the option -with-PS=gs to override the default setting.
  1222. EOF
  1223.     boom
  1224. fi
  1225.     fi
  1226. fi
  1227.     elif [ $PS = dps ]; then
  1228. if expr $RELEASE >= 6.2 >/dev/null; then
  1229.     cat >&2 <<EOF
  1230. FATAL ERROR: No DPS-based RIP available for IRIX $RELEASE!
  1231. This distribution has been configured to use the DPS-based PostScript
  1232. RIP that is only available as a COFF executable.  This program cannot
  1233. be used under IRIX $RELEASE.  You must use a different RIP such as the
  1234. Ghostscript-based RIP in the fw_gs.sw.gs installation image which is
  1235. found on the SGI Freeware CD-ROM.  The fw_gs package is also included
  1236. in the binary distribution of HylaFAX for SGI systems found on ftp.sgi.com.
  1237. Once you have installed the Ghostscript distribution rerun faxsetup
  1238. with the option -with-PS=gs to override the default setting.
  1239. EOF
  1240.     boom
  1241. else
  1242.     appMisConfigured $PATH_PSRIP
  1243. fi
  1244.     else
  1245. appMisConfigured $PATH_PSRIP
  1246.     fi
  1247.     #
  1248.     # Force bin/ps2fax and bin/pdf2fax to point to the appropriate scripts.
  1249.     #
  1250.     Note ""
  1251.     Note "Make $DIR_SPOOL/bin/ps2fax a link to $DIR_SPOOL/bin/ps2fax.$PS."
  1252.     Note ""
  1253.     $RM bin/ps2fax
  1254.     $RM bin/pdf2fax
  1255.     if [ -n "$LN_S" ]; then
  1256. $LN $LN_S ps2fax.$PS bin/ps2fax;
  1257. if [ $PS = gs ]; then
  1258.     Note ""
  1259.     Note "Make $DIR_SPOOL/bin/pdf2fax a link to $DIR_SPOOL/bin/pdf2fax.$PS."
  1260.     Note ""
  1261.     $LN $LN_S pdf2fax.$PS bin/pdf2fax;
  1262. else
  1263.     Note ""
  1264.     Note "Server-side PDF conversion is not supported on this system."
  1265.     Note ""
  1266. fi
  1267.     else
  1268. $LN bin/ps2fax.$PS bin/ps2fax;
  1269. if [ $PS = gs ]; then
  1270.     Note ""
  1271.     Note "Make $DIR_SPOOL/bin/pdf2fax a link to $DIR_SPOOL/bin/pdf2fax.$PS."
  1272.     Note ""
  1273.     $LN bin/pdf2fax.$PS bin/pdf2fax;
  1274. else
  1275.     Note ""
  1276.     Note "Server-side PDF conversion is not supported on this system."
  1277.     Note ""
  1278. fi
  1279.     fi
  1280. fi
  1281. #
  1282. # Find the full pathname of a file
  1283. # using the specified test operation.
  1284. #
  1285. findThing()
  1286. {
  1287.     t="$1"; app=$2; path=$3;
  1288.     case $app in
  1289.     /*) eval $t $app && { echo $app; return; };;
  1290.     esac
  1291.     IFS=:
  1292.     for i in $path; do
  1293. eval $t $i/$app && { echo $i/$app; return; }
  1294.     done
  1295. }
  1296. #
  1297. # Find the full pathname of an executable.
  1298. #
  1299. findApp()
  1300. {
  1301.     findThing "test -x" $1 $2
  1302. }
  1303. #
  1304. # Deal with known alternate locations for system files.
  1305. #
  1306. PickFile()
  1307. {
  1308.     for i do
  1309. test -f $i && { echo $i; return; }
  1310.     done
  1311.     echo $1
  1312. }
  1313. INETDCONF=`PickFile $INETDCONF /etc/inetd.conf /etc/inet/inetd.conf`
  1314. ALIASES=`PickFile $ALIASES   /etc/aliases /etc/ucbmail/aliases /etc/mail/aliases /usr/mmdf/table/alias.user /usr/mmdf/table/alias.n /etc/postfix/aliases`
  1315. SERVICES=`PickFile $SERVICES  /etc/inet/services`
  1316. test -f /etc/master.passwd && PASSWD=/etc/master.passwd
  1317. #
  1318. # Figure out which brand of echo we have and define
  1319. # prompt and printf shell functions accordingly.
  1320. # Note that we assume that if the System V-style
  1321. # echo is not present, then the BSD printf program
  1322. # is available.
  1323. #
  1324. t=`(printf hello) 2>/dev/null`
  1325. if [ "$t" != hello ]; then
  1326.     cat >&2 <<EOF
  1327. FATAL ERROR: No printf command or emulation!
  1328. HylaFAX requires a shell-level program that understands C-style strings
  1329. (e.g. "r") and has a mechanism for printing a string without a trailing
  1330. newline character.  The System V echo command and the BSD/POSIX-style
  1331. printf command are known to support these functions;  however your system
  1332. does not appear to have either of these programs.  If you have a program
  1333. hidden somewhere on your system be sure to include it in the search path
  1334. used by faxsetup:
  1335.     $PATH
  1336. and then rerun faxsetup.  Otherwise a printf command is included in the
  1337. GNU shell utilities package that can be retrieved by public FTP.
  1338. EOF
  1339.     boom
  1340. fi
  1341. if onServer; then
  1342.     dumpPromptFuncs >&5
  1343. fi
  1344. #
  1345. # Prompt the user for a string that can not be null.
  1346. #
  1347. promptForNonNullStringParameter()
  1348. {
  1349.     x=""
  1350.     while [ -z "$x" ]; do
  1351. prompt "$2 [$1]?";
  1352. if [ "$INTERACTIVE" != "no" ]; then
  1353.     read x
  1354. else
  1355.     x=
  1356.     echo
  1357. fi
  1358. if [ "$x" ]; then
  1359.     # strip leading and trailing white space
  1360.     x=`echo "$x" | $SED -e 's/^[  ]*//' -e 's/[  ]*$//'`
  1361. else
  1362.     x="$1"
  1363. fi
  1364.     done
  1365.     param="$x"
  1366. }
  1367. #
  1368. # Prompt the user for a string that can be null.
  1369. #
  1370. promptForStringParameter()
  1371. {
  1372.     prompt "$2 [$1]?";
  1373.     if [ "$INTERACTIVE" != "no" ]; then
  1374. read x
  1375.     else
  1376. x=
  1377. echo
  1378.     fi
  1379.     if [ "$x" ]; then
  1380. # strip leading and trailing white space
  1381. x=`echo "$x" | $SED -e 's/^[  ]*//' -e 's/[  ]*$//'`
  1382.     else
  1383. x="$1"
  1384.     fi
  1385.     param="$x"
  1386. }
  1387. #
  1388. # Prompt the user for a numeric value.
  1389. #
  1390. promptForNumericParameter()
  1391. {
  1392.     x=""
  1393.     while [ -z "$x" ]; do
  1394. prompt "$2 [$1]?";
  1395. if [ "$INTERACTIVE" != "no" ]; then
  1396.     read x
  1397. else
  1398.     x=
  1399.     echo
  1400. fi
  1401. if [ "$x" ]; then
  1402.     # strip leading and trailing white space
  1403.     x=`echo "$x" | $SED -e 's/^[  ]*//' -e 's/[  ]*$//'`
  1404.     match=`expr "$x" : "([0-9]*)"`
  1405.     if [ "$match" != "$x" ]; then
  1406. echo ""
  1407. echo "This must be entirely numeric; please correct it."
  1408. echo ""
  1409. x="";
  1410.     fi
  1411. else
  1412.     x="$1"
  1413. fi
  1414.     done
  1415.     param="$x"
  1416. }
  1417. #
  1418. # Prompt the user for a C-style numeric value.
  1419. #
  1420. promptForCStyleNumericParameter()
  1421. {
  1422.     x=""
  1423.     while [ -z "$x" ]; do
  1424. prompt "$2 [$1]?";
  1425. if [ "$INTERACTIVE" != "no" ]; then
  1426.     read x
  1427. else
  1428.     x=
  1429.     echo
  1430. fi
  1431. if [ "$x" ]; then
  1432.     # strip leading and trailing white space and C-style 0x prefix
  1433.     x=`echo "$x" | $SED -e 's/^[  ]*//' -e 's/[  ]*$//'`
  1434.     match=`expr "$x" : "([0-9]*)" | "$x" : "(0x[0-9a-fA-F]*)"`
  1435.     if [ "$match" != "$x" ]; then
  1436. echo ""
  1437. echo "This must be entirely numeric; please correct it."
  1438. echo ""
  1439. x="";
  1440.     fi
  1441. else
  1442.     x="$1"
  1443. fi
  1444.     done
  1445.     param="$x"
  1446. }
  1447. #
  1448. # Prompt the user for a boolean value.
  1449. #
  1450. promptForBooleanParameter()
  1451. {
  1452.     x=""
  1453.     while [ -z "$x" ]; do
  1454. prompt "$2 [$1]?";
  1455. if [ "$INTERACTIVE" != "no" ]; then
  1456.     read x
  1457. else
  1458.     x=
  1459.     echo
  1460. fi
  1461. if [ "$x" ]; then
  1462.     # strip leading and trailing white space
  1463.     x=`echo "$x" | $SED -e 's/^[  ]*//' -e 's/[  ]*$//'`
  1464.     case "$x" in
  1465.     n|no|off) x=no;;
  1466.     y|yes|on) x=yes;;
  1467.     *)
  1468. cat <<EOF
  1469. "$x" is not a valid boolean parameter setting;
  1470. use one of: "yes", "on", "no", or "off".
  1471. EOF
  1472. x="";;
  1473.     esac
  1474. else
  1475.     x="$1"
  1476. fi
  1477.     done
  1478.     param="$x"
  1479. }
  1480. #
  1481. # Compile a table of configuration parameters prompts into
  1482. # a shell program that can be ``eval'd'' to prompt the user
  1483. # for changes to the current parameter settings.
  1484. #
  1485. compilePrompts()
  1486. {
  1487.     $AWK -F'[ ]+' '
  1488. function p(t)
  1489. {
  1490.     printf "promptFor%sParameter "$%s" "%s";%s="$param"n", t, $2, $3, $2
  1491. }
  1492. $1 == "#" { p("Numeric"); next }
  1493. $1 == "C#" { p("CStyleNumeric"); next }
  1494. $1 == "S" { p("String"); next }
  1495. $1 == "NNS" { p("NonNullString"); next }
  1496. $1 == "B" { p("Boolean"); next }
  1497. { printf "promptFor%sn", $1 }
  1498. '
  1499. }
  1500. faxUID=`grep "^$PROTOUID:" $PASSWD | cut -d: -f3`
  1501. if [ -z "$faxUID" ]; then faxUID=$defPROTOUID; fi
  1502. faxGID=`grep "^$PROTOGID:" $GROUP | cut -d: -f3`
  1503. if [ -z "$faxGID" ]; then faxGID=$defPROTOGID; fi
  1504. #
  1505. # Add a fax user to the password file and lock the
  1506. # entry so that noone can login as the user.
  1507. #
  1508. addFaxUser()
  1509. {
  1510.     emsg1=`addPasswd $FAX $faxUID $faxGID $DIR_SPOOL 2>&1`
  1511.     case $? in
  1512.     0)  emsg2=`lockPasswd $FAX 2>&1`
  1513. case $? in
  1514. 0) echo "Added user "$FAX" to $PASSWD.";;
  1515. *) emsg3=`deletePasswd $FAX 2>&1`
  1516.    case $? in
  1517.    0|9) cat <<-EOF
  1518. Failed to add user "$FAX" to $PASSWD because the
  1519. attempt to lock the password failed with:
  1520. "$emsg2"
  1521. Please fix this problem and rerun this script."
  1522. EOF
  1523. ;;
  1524.    *)   cat <<-EOF
  1525. You will have to manually edit $PASSWD because
  1526. after successfully adding the new user "$FAX", the
  1527. attempt to lock its password failed with:
  1528. "$emsg2"
  1529. and the attempt to delete the insecure passwd entry failed with:
  1530. "$emsg3"
  1531. To close this security hole, you should add a password
  1532. to the "$FAX" entry in the file $PASSWD, or lock this
  1533. entry with an invalid password.
  1534. EOF
  1535. ;;
  1536.     esac
  1537.     boom;;
  1538. esac;;
  1539.     9)  # fax was already in $PASSWD, but not found with grep
  1540. ;;
  1541.     *)  cat <<-EOF
  1542. There was a problem adding user "$FAX" to $PASSWD;
  1543. the command failed with:
  1544. "$emsg1"
  1545. HylaFAX will not work until you have corrected this problem.
  1546. EOF
  1547. boom;;
  1548.     esac
  1549. }
  1550. isOK()
  1551. {
  1552.     x="$1"
  1553.     test -z "$x" || test "$x" = y || test "$x" = yes
  1554. }
  1555. if onServer; then
  1556.     x=`grep "^$FAX:" $PASSWD | cut -d: -f3`
  1557.     if [ "$PASSWD" = "/etc/master.passwd" ]; then
  1558. PARAMLOC=9;
  1559.     else
  1560. PARAMLOC=6;
  1561.     fi
  1562.     if [ -z "$x" ]; then
  1563. echo ""
  1564. echo ""
  1565. echo "You do not appear to have a "$FAX" user in the password file."
  1566. prompt "HylaFAX needs this to work properly, add it [yes]?"
  1567. if [ "$INTERACTIVE" != "no" ]; then
  1568.     read x
  1569. else
  1570.     x=
  1571.     echo
  1572. fi
  1573. isOK $x && addFaxUser
  1574.     fi
  1575.     machdepPasswdWork
  1576.     #
  1577.     # Verify existence, permission and ownership of sensitive files.
  1578.     # XXX there are other files too 
  1579.     #
  1580.     HOSTS=$DIR_SPOOL/etc/hosts.hfaxd
  1581.     test -f $HOSTS || {
  1582. cat<<EOF
  1583. Warning: $1 does not exist!
  1584. The file $1 does not exist or is not a regular file.
  1585. This file specifies which clients are permitted to use the HylaFAX
  1586. server.  The file will be initialized so that local clients are
  1587. provided service.  Consult the HTML documentation and the manual
  1588. page hosts.hfaxd(@MANNUM4_5@) for more information on setting up this file.
  1589. EOF
  1590. $RM $HOSTS
  1591. echo "localhost" >$HOSTS
  1592. echo "127.0.0.1" >>$HOSTS
  1593.     }
  1594.     #
  1595.     # Too complicated to check contents:
  1596.     # simply force correct protection and ownership
  1597.     #
  1598.     $CHOWN $faxUID $HOSTS; $CHGRP $faxGID $HOSTS
  1599.     $CHMOD 600 $HOSTS
  1600. fi
  1601. #
  1602. # Check for services entries for hylafax and snpp.
  1603. #
  1604. hasYP=`(ypcat services) 2>/dev/null | $SED -n '$p'` 2>/dev/null
  1605. x=`$GREP '^hylafax[  ]' $SERVICES 2>/dev/null` 2>/dev/null
  1606. if [ -z "$x" ]; then
  1607.     if [ "$hasYP" ]; then
  1608. x=`ypcat services 2>/dev/null | $GREP '^hylafax[  ]'` 2>/dev/null
  1609.     fi
  1610.     if [ -z "$x" ]; then
  1611. ENTRY="hylafax 4559/tcp # HylaFAX client-server protocol"
  1612. cat<<-EOF
  1613. Warning: No hylafax service entry found!
  1614. No entry was found for the hylafax service in the YP/NIS database
  1615. or in the $SERVICES file.  The software should work properly
  1616. without one (except if you want to start hfaxd from inetd), but you
  1617. will see warning messages whenever you run a HylaFAX client
  1618. application.  If you want to manually add an entry the following
  1619. information should be used:
  1620. $ENTRY
  1621. EOF
  1622. prompt "Should a hylafax entry be added to $SERVICES [yes]?"
  1623. if [ "$INTERACTIVE" != "no" ]; then
  1624.     read x
  1625. else
  1626.     x=
  1627.     echo
  1628. fi
  1629. isOK $x && echo "$ENTRY" >>$SERVICES
  1630.     fi
  1631. fi
  1632. x=`$GREP '^snpp[  ]' $SERVICES 2>/dev/null` 2>/dev/null
  1633. if [ -z "$x" ]; then
  1634.     if [ "$hasYP" ]; then
  1635. x=`ypcat services 2>/dev/null | $GREP '^snpp[  ]'` 2>/dev/null
  1636.     fi
  1637.     if [ -z "$x" ]; then
  1638. ENTRY="snpp 444/tcp # Simple Network Paging Protocol"
  1639. cat<<-EOF
  1640. Warning: No snpp service entry found!
  1641. No entry was found for the Simple Network Paging Protocol (SNPP)
  1642. service in the YP/NIS database or in the $SERVICES file.
  1643. The software should work properly without one (except if you want
  1644. to start hfaxd from inetd), but you will see warning messages whenever
  1645. you run the HylaFAX sendpage program.  If you want to manually add
  1646. an entry the following information should be used:
  1647. $ENTRY
  1648. EOF
  1649. prompt "Should an snpp entry be added to $SERVICES [yes]?"
  1650. if [ "$INTERACTIVE" != "no" ]; then
  1651.     read x
  1652. else
  1653.     x=
  1654.     echo
  1655. fi
  1656. isOK $x && echo "$ENTRY" >>$SERVICES
  1657.     fi
  1658. fi
  1659. #
  1660. # Check that for servers being started at system boot.
  1661. #
  1662. if onServer; then
  1663.     signalINETD=no
  1664.     if [ -f ${DIR_SYSVINIT}/hylafax ]; then
  1665. # started by init at boot time
  1666.         if [ $FAXQ_SERVER = no ]; then
  1667.             cat <<EOF
  1668. Warning faxq will NOT be automatically started on reboot!
  1669. EOF
  1670.             true
  1671.         fi
  1672.     fi
  1673.     if [ -f $INETDCONF ] && [ $HFAXD_SERVER = no ]; then
  1674. E="hylafax stream tcp nowait root $DIR_LIBEXEC/hfaxd hfaxd -I"
  1675. editInetdConf()
  1676. {
  1677.     ed - $INETDCONF<<EOF
  1678. /^hylafax[  ]*stream[  ]*tcp/d
  1679. a
  1680. $E
  1681. .
  1682. w
  1683. q
  1684. EOF
  1685.     if [ $? != 0 ]; then
  1686. cat<<EOF
  1687. FATAL ERROR: Unable to correct HylaFAX entry in $INETDCONF!
  1688. We were unable to edit the $INETDCONF file to correct the entry
  1689. for starting up the HylaFAX client-server protocol process.  You
  1690. must manually correct this entry so that it reads:
  1691. $E
  1692. and then rerun faxsetup.
  1693. EOF
  1694. boom
  1695.     fi
  1696. }
  1697. eval `$GREP '^hylafax[  ]*stream[  ]*tcp' $INETDCONF | 
  1698.     $AWK -F'[  ]+' '{ print "F=" $6 "; U=" $5 }' 2>/dev/null`
  1699. if [ -z "$F" ] && [ -z "$U" ]; then
  1700.     cat<<EOF
  1701. There is no entry for the hylafax service in $INETDCONF.
  1702. The HylaFAX client-server protocol process can be setup to run
  1703. standalone or started by the inetd program.  A standalone setup
  1704. is preferred for performance reasons, especially if hfaxd is to
  1705. support multiple protocols (e.g. SNPP); however it may require
  1706. manual setup if your operating system does not have a System-V
  1707. style init program.
  1708. EOF
  1709.     prompt "Should an entry be added to $INETDCONF [no]?";
  1710.     if [ "$INTERACTIVE" != "no" ]; then
  1711. read x
  1712.     else
  1713. x=
  1714. echo
  1715.     fi
  1716.     if [ "$x" = y ] || [ "$x" = yes ]; then
  1717. echo "$E" >>$INETDCONF;
  1718. signalINETD=yes
  1719.     fi
  1720. else
  1721.     if [ "$F" != $DIR_LIBEXEC/hfaxd ]; then
  1722. cat<<EOF
  1723. Warning: $INETDCONF is setup wrong!
  1724. The $INETDCONF file is setup to start $F
  1725. instead of $DIR_LIBEXEC/hfaxd.  You will need to correct
  1726. this before client requests to submit jobs will be properly serviced.
  1727. EOF
  1728. prompt "Should the entry in $INETDCONF be corrected [yes]?";
  1729. if [ "$INTERACTIVE" != "no" ]; then
  1730.     read x
  1731. else
  1732.     x=
  1733.     echo
  1734. fi
  1735. isOK "$x" && editInetdConf
  1736.     fi
  1737.     if [ "$U" != $FAX ]; then
  1738. cat<<EOF
  1739. Warning: $INETDCONF is setup wrong!
  1740. Warning, the HylaFAX entry is setup so that $F is run by the
  1741. $U user instead of the $FAX user.  This must be corrected
  1742. before client requests to submit jobs will be properly serviced.
  1743. EOF
  1744. prompt "Should the entry in $INETDCONF be corrected [yes]?";
  1745. if [ "$INTERACTIVE" != "no" ]; then
  1746.     read x
  1747. else
  1748.     x=
  1749.     echo
  1750. fi
  1751. isOK "$x" && editInetdConf
  1752.     fi
  1753. fi
  1754.     elif [ ! -f $INETDCONF ] && [ $HFAXD_SERVER = no ]; then
  1755. cat<<EOF
  1756. Warning: Don't know how to startup HylaFAX servers!
  1757. No $INETDCONF file was found and the System V boot script
  1758. that starts up the HylaFAX server processes was also not present.
  1759. You will need to manually arrange for the various HylaFAX servers
  1760. to be started up on your system when it is booted multi-user. 
  1761. Specifically you will need to start the faxq and hfaxd programs and
  1762. any faxgetty processes that are to service inbound calls on modems.
  1763. EOF
  1764.     fi
  1765. fi
  1766. #
  1767. # Check for a FaxMaster entry for sending mail.
  1768. #
  1769. if onServer; then
  1770.     x=`(ypcat -k aliases) 2>/dev/null | $GREP -i '^faxmaster'` 2>/dev/null
  1771.     if [ -z "$x" ] && [ -f $ALIASES ]; then
  1772. x=`$GREP -i '^faxmaster' $ALIASES`
  1773.     fi
  1774.     if [ -z "$x" ]; then
  1775. cat<<-EOF
  1776. There does not appear to be an entry for the FaxMaster either in
  1777. the YP/NIS database or in the $ALIASES file.  The
  1778. FaxMaster is the primary point of contact for HylaFAX problems. 
  1779. The HylaFAX client-server protocol server identifies this alias as
  1780. the place to register complaints and HylaFAX directs automatic mail
  1781. messages to this user when problems are identified on a server
  1782. machine or when the routine server maintainence scripts are run
  1783. (e.g. faxcron).
  1784. EOF
  1785. prompt "Should an entry be added for the FaxMaster to $ALIASES [yes]?"
  1786. if [ "$INTERACTIVE" != "no" ]; then
  1787.     read x
  1788. else
  1789.     x=
  1790.     echo
  1791. fi
  1792. if isOK $x; then
  1793.     promptForNonNullStringParameter "${USER:-root}" 
  1794.        "Users to receive fax-related mail"
  1795.     (echo "# alias for notification messages from HylaFAX servers";
  1796.      echo "FaxMaster: $param") >>$ALIASES
  1797.     if newaliases 2>/dev/null; then
  1798. echo "Rebuilt $ALIASES database."
  1799.     else
  1800. # could be a SCO machine running mmdf
  1801. if test -x /usr/mmdf/table/dbmbuild ; then
  1802.     su mmdf -c "/usr/mmdf/table/dbmbuild"
  1803. else
  1804.     echo "Can not find newaliases to rebuild $ALIASES;"
  1805.     echo "you will have to do it yourself."
  1806. fi
  1807.     fi
  1808. fi
  1809.     fi
  1810.     FAXMASTER=$x
  1811. fi
  1812. #
  1813. # Generate or update default values for status/any.info
  1814. #
  1815. if onServer; then
  1816.     if [ -r $DIR_SPOOL/status/any.info ]; then
  1817. INFO=`cat $DIR_SPOOL/status/any.info | 
  1818. $GREP -v "HylaFAX version" | $GREP -v "FaxMaster"`
  1819.     else INFO=""
  1820.     fi
  1821.     if [ -d $DIR_SPOOL/status ]; then
  1822. echo "Update $DIR_SPOOL/status/any.info."
  1823. echo "HylaFAX version $VERSION built $DATE for $TARGET" 
  1824. > $DIR_SPOOL/status/any.info
  1825. echo $FAXMASTER >> $DIR_SPOOL/status/any.info
  1826. echo $INFO >> $DIR_SPOOL/status/any.info
  1827.     fi
  1828. fi
  1829. #
  1830. # Emit shell functions required by faxaddmodem.
  1831. #
  1832. if onServer; then
  1833.     printConfig()
  1834.     {
  1835. cat<<EOF
  1836. HylaFAX configuration parameters are:
  1837. [1] Init script starts faxq: $FAXQ_SERVER
  1838. [2] Init script starts hfaxd $HFAXD_SERVER
  1839. [3] Start paging protocol: $HFAXD_SNPP_SERVER
  1840. EOF
  1841.     }
  1842.     promptForParameter()
  1843.     {
  1844. case $1 in
  1845.     1) promptForBooleanParameter "$FAXQ_SERVER" 
  1846. "Init script starts faxq"; FAXQ_SERVER="$param"
  1847.     ;;
  1848.     2) promptForBooleanParameter "$HFAXD_SERVER" 
  1849. "Init script starts hfaxd"; HFAXD_SERVER="$param"
  1850.     ;;
  1851.     3) promptForBooleanParameter "$HFAXD_SNPP_SERVER" 
  1852. "Start paging protocol"; HFAXD_SNPP_SERVER="$param"
  1853.     ;;
  1854. esac
  1855.     }
  1856.     ok=skip
  1857.     while [ "$ok" != y ] && [ "$ok" != yes ]; do
  1858. if [ "$ok" != skip ]; then
  1859.     for i in 1 2 3 4 ; do
  1860.        promptForParameter $i;
  1861.     done
  1862. fi
  1863. printConfig
  1864. prompt "Are these ok [yes]?";
  1865. if [ "$INTERACTIVE" != "no" ]; then
  1866.     read ok;
  1867. else
  1868.     ok=y
  1869.     echo
  1870. fi
  1871. test -z "$ok" && ok=yes
  1872. case "$ok" in
  1873. [1-4]) promptForParameter $ok;;
  1874. [yY]*|[nN]*) continue;;
  1875. ?*)
  1876.     echo ""
  1877.     echo ""y", "yes", or <RETURN> accepts the displayed parameters."
  1878.     echo "A number lets you change the numbered parameter."
  1879.     echo ""
  1880.     ;;
  1881. esac
  1882. ok=skip
  1883.     done
  1884.     STTYCMD=`findApp stty $PATH`
  1885.     (dumpTTYFuncs; dumpSTTYFuncs; dumpOtherModemFuncs)>&5
  1886.     $RM etc/setup.modem
  1887.     $MV etc/setup.tmp etc/setup.modem
  1888.     $CHMOD 444 etc/setup.modem
  1889.     $RM etc/setup.cache
  1890.     (echo '# Warning, this file was automatically generated by faxsetup'
  1891.      echo '# on' `date` "for ${USER:-$euid}"
  1892.      dumpvals |sort)> etc/setup.cache
  1893.     $CHMOD 444 etc/setup.cache
  1894.     Note ""
  1895.     Note "Modem support functions written to $DIR_SPOOL/etc/setup.modem."
  1896.     Note "Configuration parameters written to $DIR_SPOOL/etc/setup.cache."
  1897. fi
  1898. #
  1899. # Configuration parameters specific to scheduler operation.
  1900. # Required parameters are *always* emitted in the created
  1901. # configuration file; optional parameters are emitted
  1902. # only if the configured value differs from the default
  1903. # value known to be used by the server.
  1904. #
  1905. # NB: the order of some parameters is important; e.g.
  1906. #     DialStringRules must be after AreaCode and CountryCode.
  1907. #
  1908. RequiredSchedulerParameters="
  1909.     LogFacility
  1910.     CountryCode
  1911.     AreaCode
  1912.     LongDistancePrefix
  1913.     InternationalPrefix
  1914.     DialStringRules
  1915.     ServerTracing
  1916. "
  1917. OptionalSchedulerParameters="
  1918.     ContCoverPage
  1919.     ContCoverCmd
  1920.     MaxConcurrentCalls
  1921.     MaxDials
  1922.     MaxSendPages
  1923.     MaxTries
  1924.     ModemGroup
  1925.     PostScriptTimeout
  1926.     PS2FaxCmd
  1927.     SendFaxCmd
  1928.     SendPageCmd
  1929.     SendUUCPCmd
  1930.     SessionTracing
  1931.     TimeOfDay
  1932.     Use2D
  1933. "
  1934. #
  1935. # NB: these defaults are set above
  1936. #
  1937. OptionalParameters="
  1938.     $OptionalSchedulerParameters
  1939.     JobReqOther
  1940.     NotifyCmd
  1941.     UUCPLockDir
  1942.     UUCPLockTimeout
  1943.     UUCPLockType
  1944. "
  1945. SchedulerParameters="
  1946.     $RequiredSchedulerParameters
  1947.     $OptionalParameters
  1948. "
  1949. #
  1950. # Echo the configuration lines for those scheduler parameters
  1951. # whose value is different from the default value.  Note
  1952. # that we handle the case where there is embedded whitespace
  1953. # by enclosing the parameter value in quotes.
  1954. #
  1955. echoSchedulerParameters()
  1956. {
  1957.     (for i in $RequiredSchedulerParameters; do
  1958. eval echo "$i:$$i:"
  1959.      done
  1960.      for i in $OptionalSchedulerParameters; do
  1961. eval echo "$i:$$i:$default$i"
  1962.      done) | $AWK -F: '
  1963. function p(tag, value)
  1964. {
  1965.     tabs = substr("ttt", 1, 3-int((length(tag)+1)/8));
  1966.     if (match(value, "^[^"].*[ ]") == 0)
  1967. printf "%s:%s%sn", tag, tabs, value
  1968.     else
  1969. printf "%s:%s"%s"n", tag, tabs, value
  1970. }
  1971. $2 != $3{ p($1, $2) }'
  1972. }
  1973. #
  1974. # Print the current server configuration parameters.
  1975. #
  1976. printSchedulerConfig()
  1977. {
  1978.     (for i in $SchedulerParameters; do
  1979. eval echo "$i:$$i:$default$i"
  1980.     done) | $AWK -F: '
  1981. function p(tag, value)
  1982. {
  1983.     tabs = substr("ttt", 1, 3-int((length(tag)+1)/8));
  1984.     printf "%s:%s%sn", tag, tabs, value
  1985. }
  1986. BEGIN { printf "nThe non-default scheduler parameters are:nn" }
  1987. $2 != $3{ p($1, $2) }
  1988. END { printf "n" }'
  1989. }
  1990. checkForLocalFile()
  1991. {
  1992.     f="`echo $1 | $SED 's/"//g'`"
  1993.     if [ ! -f $DIR_SPOOL/$f ]; then
  1994. cat<<EOF
  1995. Warning, the $2 file,
  1996.     $DIR_SPOOL/$f
  1997. does not exist, or is not a plain file.  This file must
  1998. reside in the $DIR_SPOOL directory tree.
  1999. EOF
  2000. ok=no;
  2001.     fi
  2002. }
  2003. isNotOK()
  2004. {
  2005.     x="$1"
  2006.     test "$x" != y && test "$x" != yes
  2007. }
  2008. CONFIG=$DIR_SPOOL/etc/config # faxq config file
  2009. if onServer; then
  2010.     if [ ! -f $CONFIG ]; then
  2011. for i in $SchedulerParameters; do
  2012.     eval $i=$default$i
  2013. done
  2014. echo ""
  2015. echo "No scheduler config file exists, creating one from scratch."
  2016. ok=prompt # prompt for parameters
  2017. PROMPTS=$TMPDIR/faxpr$$
  2018. JUNK="$JUNK $PROMPTS"
  2019. $RM -rf $PROMPTS
  2020. while true; do
  2021.     if [ "$ok" != skip ]; then
  2022. test -f $PROMPTS || (
  2023. ${NOCLOBBER_ON}
  2024. > $PROMPTS || boom
  2025. ${NOCLOBBER_OFF}
  2026. compilePrompts>$PROMPTS<<EOF
  2027. # CountryCode Country code
  2028. # AreaCode Area code
  2029. # LongDistancePrefix Long distance dialing prefix
  2030. # InternationalPrefix International dialing prefix
  2031. NNS DialStringRules Dial string rules file (relative to $DIR_SPOOL)
  2032. C# ServerTracing Tracing during normal server operation
  2033. C# SessionTracing
  2034. Default tracing during send and receive sessions
  2035. S ContCoverPage Continuation cover page (relative to $DIR_SPOOL)
  2036. C# PostScriptTimeout
  2037. Timeout when converting PostScript documents (secs)
  2038. C# MaxConcurrentCalls
  2039. Maximum number of concurrent jobs to a destination
  2040. S ModemGroup Define a group of modems
  2041. S TimeOfDay Time of day restrictions for outbound jobs
  2042. C# UUCPLockTimeout
  2043. Timeout before purging a stale UUCP lock file (secs)
  2044. C# MaxSendPages Max number of pages to permit in an outbound job
  2045. S LogFacility Syslog facility name for ServerTracing messages
  2046. EOF
  2047. )
  2048. . $PROMPTS
  2049.     fi
  2050.     checkForLocalFile $DialStringRules "dial string rules"
  2051.     printSchedulerConfig; prompt "Are these ok [yes]?";
  2052.     if [ "$INTERACTIVE" != "no" ]; then
  2053. read ok
  2054.     else
  2055. ok=
  2056. echo
  2057.     fi
  2058.     isOK "$ok" && break
  2059. done
  2060. #
  2061. # All done with the prompting; edit up a config file!
  2062. #
  2063. echo ""
  2064. echo "Creating new configuration file $CONFIG..."
  2065. echoSchedulerParameters >$CONFIG 2>/dev/null
  2066. test -s $CONFIG || {
  2067.     JUNK="$JUNK $CONFIG" # clobber on exit
  2068.     cat<<EOF
  2069. FATAL ERROR: Problem writing $CONFIG!
  2070. Sorry, something went wrong writing the new scheduler configuration
  2071. file.  Check to make sure there is sufficient disk space and rerun
  2072. this script.
  2073. EOF
  2074.     boom
  2075. }
  2076. $CHOWN $faxUID $CONFIG; $CHGRP $faxGID $CONFIG
  2077. $CHMOD 644 $CONFIG
  2078.     fi
  2079. fi
  2080. #
  2081. # Startup/restart server processes.
  2082. #
  2083. if onServer; then
  2084.     echo ""
  2085.     echo "Restarting HylaFAX server processes."
  2086.     findproc()
  2087.     {
  2088. # NB: ps ax should give an error on System V, so we try it first!
  2089. pid="`ps ax 2>/dev/null | $AWK "
  2090. /[/ (]$1[ )]/ {print \$1;}
  2091. /[/ ]$1$/ {print \$1;}"`"
  2092. test "$pid" ||
  2093.     pid="`ps -e 2>/dev/null | $AWK "/ $1[ ]*$/ {print \$1;}"`"
  2094. echo "$pid"
  2095.     }
  2096.     HFAXD="`findproc hfaxd`"
  2097. #    if [ "$HFAXD" ]; then
  2098. #    fi
  2099.     FAXD="`findproc faxd`"
  2100.     if [ "$FAXD" ]; then
  2101. echo ""
  2102. echo "You seem to be running FlexFAX (there are faxd processes)."
  2103. prompt "Is it ok to terminate these processes ($FAXD) [yes]?";
  2104. if [ "$INTERACTIVE" != "no" ]; then
  2105.     read x
  2106. else
  2107.     x=
  2108.     echo
  2109. fi
  2110. if isOK "$x"; then
  2111.     if kill $FAXD; then
  2112. echo "Sent a SIGTERM to processes $FAXD."
  2113.     else
  2114. echo "Unable to send a SIGTERM to processes $FAXD."
  2115.     fi
  2116.     while true; do
  2117. for delay in 1 1 2 2 5 5; do
  2118.     FAXD="`findproc faxd`"
  2119.     test "$FAXD" || break
  2120.     sleep $delay
  2121. done
  2122. test -z "$FAXD" && break
  2123. cat<<EOF
  2124. Warning: faxd is still running!
  2125. Something is hung.  The command
  2126.     kill $FAXD
  2127.     
  2128. did not terminate the faxd processes as expected.
  2129. EOF
  2130. prompt "Should we continue to wait [no]?";
  2131. if [ "$INTERACTIVE" != "no" ]; then
  2132.     read x
  2133. else
  2134.     x=
  2135.     echo
  2136. fi
  2137. isNotOK "$x" && break
  2138.     done
  2139. fi
  2140.     fi
  2141.     FAXQ="`findproc faxq`"
  2142.     if [ "$FAXQ" ]; then
  2143. cat<<EOF
  2144. You have a HylaFAX scheduler process running.  faxq will be
  2145. restarted shortly, as soon as some other work has been completed.
  2146. EOF
  2147. prompt "Can I terminate this faxq process ($FAXQ) [yes]?";
  2148. if [ "$INTERACTIVE" != "no" ]; then
  2149.     read x
  2150. else
  2151.     x=
  2152.     echo
  2153. fi
  2154. if isOK "$x" ]; then
  2155.     $DIR_SBIN/faxquit >/dev/null 2>&1
  2156.     while true; do
  2157. for delay in 1 1 2 2 5 5; do
  2158.     FAXQ="`findproc faxq`"
  2159.     test "$FAXQ" || break
  2160.     sleep $delay
  2161. done
  2162. test -z "$FAXQ" && break
  2163. pids=
  2164. for p in faxsend pagesend; do
  2165.     pids="${pids}`findproc $p`"
  2166. done
  2167. if [ "$pids" ]; then
  2168.     cat<<EOF
  2169. Warning: faxq is busy with outbound jobs!
  2170. faxq did not terminate in response to the faxquit command because
  2171. there are subprocesses actively processing outbound jobs.
  2172. EOF
  2173.     prompt "Should we continue to wait [yes]?";
  2174.     if [ "$INTERACTIVE" != "no" ]; then
  2175. read x
  2176.     else
  2177. x=
  2178. echo
  2179.     fi
  2180.     isOK "$x" || break
  2181. else
  2182.     cat<<EOF
  2183. Warning: faxq is still running for some reason!
  2184. Something is hung, faxq did not terminate in response to the faxquit
  2185. command.  There do not appear to be any faxsend or pagesend subprocesses
  2186. actively handling outbound jobs so the reason for it running is unknown.
  2187. EOF
  2188.     prompt "Should we continue to wait [no]?";
  2189.     if [ "$INTERACTIVE" != "no" ]; then
  2190. read x
  2191.     else
  2192. x=
  2193. echo
  2194.     fi
  2195.     isNotOK "$x" && break
  2196. fi
  2197.     done
  2198. fi
  2199.     fi
  2200.     if [ "$FAXQ" ] || [ "$FAXD" ]; then
  2201. cat<<EOF
  2202. FATAL ERROR: Old server processes still running!
  2203. One or more old server processes are still running.  It is not wise
  2204. to start new server processes while old processes are running because
  2205. their actions might conflict.  You need to terminate the existing
  2206. processes and rerun this script or manually startup the new HylaFAX
  2207. server processes.
  2208. EOF
  2209. boom
  2210.     fi
  2211.     if [ "$signalINETD" = yes ]; then
  2212. INETD="`findproc inetd`"
  2213. if [ "$INETD" ]; then
  2214.     if kill -HUP $INETD 2>/dev/null; then
  2215. echo "Sent inetd a SIGHUP so that it re-reads the configuration file."
  2216.     else
  2217. echo "Unable to send inetd a SIGHUP, you may need to do it yourself."
  2218.     fi
  2219. else
  2220.     echo "Strange, you do not seem to have an inetd process running."
  2221. fi
  2222.     fi
  2223.     prompt "Should I restart the HylaFAX server processes [yes]?";
  2224.     if [ "$INTERACTIVE" != "no" ]; then
  2225. read x
  2226.     else
  2227. x=
  2228. echo
  2229.     fi
  2230.     if isOK "$x"; then
  2231. echo ""
  2232. if [ -x ${DIR_SYSVINIT}/hylafax ]; then
  2233.     echo ${DIR_SYSVINIT}/hylafax start
  2234.     ${DIR_SYSVINIT}/hylafax start
  2235. else
  2236.     echo $DIR_SBIN/faxq; $DIR_SBIN/faxq
  2237. fi
  2238.     fi
  2239.     DEVS="`cd $DIR_SPOOL/etc; echo config.*`"
  2240.     if [ -z "$DEVS" ] || [ "$DEVS" = 'config.*' ]; then
  2241. cat<<EOF
  2242. You do not appear to have any modems configured for use.  Modems are
  2243. configured for use with HylaFAX with the faxaddmodem(@MANNUM1_8@) command.
  2244. EOF
  2245. prompt "Do you want to run faxaddmodem to configure a modem [yes]?";
  2246. if [ "$INTERACTIVE" != "no" ]; then
  2247.     read x
  2248. else
  2249.     x=no
  2250.     echo
  2251. fi
  2252. while isOK "$x"; do
  2253.      $DIR_SBIN/faxaddmodem
  2254.      prompt "Do you want to run faxaddmodem to configure another modem [yes]?"; read x
  2255. done
  2256. DEVS="`cd $DIR_SPOOL/etc; echo config.*`"
  2257.     fi
  2258.     if [ -n "$DEVS" ] && [ "$DEVS" != 'config.*' ]; then
  2259. FAXGETTY="`findproc faxgetty`"
  2260. if [ "$FAXGETTY" ]; then
  2261.     cat<<EOF
  2262. Looks like you have some faxgetty processes running (PIDs are):
  2263.     $FAXGETTY
  2264. It is usually a good idea to restart these processes after running
  2265. faxsetup; especially if have just installed new software.  If these
  2266. processes are being started by init(@MANNUM1_8@) then sending each of them a
  2267. QUIT message with the faxquit command should cause them to be restarted.
  2268. EOF
  2269.     prompt "Is it ok to send a QUIT command to each process [yes]?"
  2270.     if [ "$INTERACTIVE" != "no" ]; then
  2271. read x
  2272.     else
  2273. x=
  2274. echo
  2275.     fi
  2276.     if isOK "$x"; then
  2277. for x in $DEVS; do
  2278.     devid="`expr $x : 'config.(.*)'`"
  2279.     if [ -w $DIR_SPOOL/FIFO.$devid ]; then
  2280. echo $DIR_SBIN/faxquit $devid
  2281. $DIR_SBIN/faxquit $devid >/dev/null 2>&1
  2282.     fi
  2283. done
  2284.     fi
  2285. else
  2286.     if [ -f /etc/inittab ]; then
  2287. FAXGETTY="`$GREP '[^#].*:respawn:faxgetty.*' /etc/inittab`"
  2288.     elif [ -f /etc/ttys ]; then
  2289. FAXGETTY="`$GREP '[^#].*faxgetty.*' /etc/ttys`"
  2290.     fi
  2291.     if [ "$FAXGETTY" ]; then
  2292. cat<<EOF
  2293. You appear to have faxgetty setup to run on some tty lines but no faxgetty
  2294. processes were found running.  This might happen if you manually edited the
  2295. tty configuration file but did not notify init to re-read the file.
  2296. EOF
  2297. prompt "Send init a SIGHUP so that it re-reads its configuration file [yes]?"
  2298. if [ "$INTERACTIVE" != "no" ]; then
  2299.     read x
  2300. else
  2301.     x=
  2302.     echo
  2303. fi
  2304. if isOK "$x"; then
  2305.     init="`findproc init`"
  2306.     if [ "$init" ]; then
  2307. if kill -HUP $init; then
  2308.     echo "Sent init a SIGHUP; the faxgetty processes should be started."
  2309. else
  2310.     echo "Unable to send init a SIGHUP; you may need to do this yourself."
  2311. fi
  2312.     else
  2313. echo "Strange, you do not seem to have an init process running!"
  2314.     fi
  2315. fi
  2316.     else
  2317. cat<<EOF
  2318. You do not appear to be using faxgetty to notify the HylaFAX scheduler
  2319. about new modems and/or their status.  This means that you must use the
  2320. faxmodem program to inform the new faxq process about the modems you
  2321. want to have scheduled by HylaFAX.  Beware that if you have modems that
  2322. require non-default capabilities specified to faxmodem then you should
  2323. read faxmodem(@MANNUM1_8@) manual page and do this work yourself (since this
  2324. script is not intelligent enough to automatically figure out the modem
  2325. capabilities and supply the appropriate arguments).
  2326. EOF
  2327. prompt "Should I run faxmodem for each configured modem [yes]?"
  2328. if [ "$INTERACTIVE" != "no" ]; then
  2329.     read x
  2330. else
  2331.     x=no
  2332.     echo
  2333. fi
  2334. if isOK "$x"; then
  2335.     for x in $DEVS; do
  2336. devid="`expr $x : 'config.(.*)'`"
  2337. if [ -w $DIR_SPOOL/FIFO.$devid ]; then
  2338.     echo $DIR_SBIN/faxmodem $devid
  2339.     $DIR_SBIN/faxmodem $devid >/dev/null 2>&1
  2340. fi
  2341.     done
  2342. fi
  2343.     fi
  2344. fi
  2345.     fi
  2346. fi
  2347. Note ""
  2348. Note "Done verifying system setup."
  2349. if onServer; then
  2350.     $RM $JUNK
  2351.     $RM -r $TMPDIR
  2352. fi
  2353. exit 0