| 1 | # Base source of start-up shell script for the Exim Monitor. Used to set the |
| 2 | # required environment variables before running the program. Using script |
| 3 | # rather than a configuration file means that computation can be done. |
| 4 | # The build process concatenates on the front of this various settings from |
| 5 | # os-specific files and from the user's configuration file. |
| 6 | |
| 7 | # Copyright (c) 2004 - 2012 University of Cambridge. |
| 8 | # See the file NOTICE for conditions of use and distribution. |
| 9 | |
| 10 | # Except when they appear in comments, the following placeholders in this |
| 11 | # source are replaced when it is turned into a runnable script: |
| 12 | # |
| 13 | # CONFIGURE_FILE_USE_NODE |
| 14 | # CONFIGURE_FILE |
| 15 | # BIN_DIRECTORY |
| 16 | # BASENAME_COMMAND |
| 17 | # HOSTNAME_COMMAND |
| 18 | # X11_LD_LIBRARY |
| 19 | |
| 20 | # PROCESSED_FLAG |
| 21 | |
| 22 | # See if caller wants to invoke gdb |
| 23 | |
| 24 | use_gdb='' |
| 25 | |
| 26 | case ${1:-foo} in |
| 27 | gdb*) use_gdb="$1"; shift ;; |
| 28 | esac |
| 29 | |
| 30 | # Save arguments (can be the usual X parameters) |
| 31 | |
| 32 | cmd_args="$@" |
| 33 | |
| 34 | # See if this installation is using the esoteric "USE_NODE" feature of Exim, |
| 35 | # in which it uses the host's name as a suffix for the configuration file name. |
| 36 | |
| 37 | if [ "CONFIGURE_FILE_USE_NODE" = "yes" ]; then |
| 38 | hostsuffix=.`uname -n` |
| 39 | fi |
| 40 | |
| 41 | # Now find the configuration file name. This has got complicated because |
| 42 | # CONFIGURE_FILE may now be a list of files. The one that is used is the first |
| 43 | # one that exists. Mimic the code in readconf.c by testing first for the |
| 44 | # suffixed file in each case. |
| 45 | |
| 46 | set `awk -F: '{ for (i = 1; i <= NF; i++) print $i }' <<End |
| 47 | CONFIGURE_FILE |
| 48 | End |
| 49 | ` |
| 50 | while [ "$config" = "" -a $# -gt 0 ] ; do |
| 51 | if [ -f "$1$hostsuffix" ] ; then |
| 52 | config="$1$hostsuffix" |
| 53 | elif [ -f "$1" ] ; then |
| 54 | config="$1" |
| 55 | fi |
| 56 | shift |
| 57 | done |
| 58 | |
| 59 | # Determine where the spool directory is and whether there is any setting of |
| 60 | # log_file_path. Search for an exim_path setting in the configure file; |
| 61 | # otherwise use the bin directory. Call that version of Exim to find the spool |
| 62 | # directory and the setting of log_file_path. |
| 63 | |
| 64 | config=${EXIMON_EXIM_CONFIG-$config} |
| 65 | |
| 66 | # Add code here to redefine "config" if an alternative configuration file |
| 67 | # should be used in some circumstances. If you do that, you should also arrange |
| 68 | # for the value to be set in EXIMON_EXIM_CONFIG, and to export that variable |
| 69 | # into the environment. BEWARE: a tab character is needed in the command below. |
| 70 | # It has had a nasty tendency to get lost in the past. Use a variable to hold a |
| 71 | # space and a tab to keep the tab in one place. |
| 72 | |
| 73 | st=' ' |
| 74 | EXIM_PATH=`grep "^[$st]*exim_path" $config | sed "s/.*=[$st]*//"` |
| 75 | if test "$EXIM_PATH" = ""; then EXIM_PATH=BIN_DIRECTORY/exim; fi |
| 76 | |
| 77 | SPOOL_DIRECTORY=`$EXIM_PATH -C $config -bP spool_directory | sed 's/.*=[ ]*//'` |
| 78 | LOG_FILE_PATH=`$EXIM_PATH -C $config -bP log_file_path | sed 's/.*=[ ]*//'` |
| 79 | |
| 80 | # If log_file_path is "syslog" then logging is only to syslog, and the monitor |
| 81 | # is unable to display a log tail unless EXIMON_LOG_FILE_PATH is set to tell |
| 82 | # it where the log data is. Otherwise, remove any occurrences of |
| 83 | # "syslog:" or ":syslog" (spaces allowed in various places) and look at the |
| 84 | # remainder of the entry. If it's null, the default is "mainlog" in the |
| 85 | # "log" directory in the spool directory. Otherwise, set the name from the |
| 86 | # given path. |
| 87 | |
| 88 | if [ "$EXIMON_LOG_FILE_PATH" != "" ] ; then |
| 89 | LOG_FILE_NAME="$EXIMON_LOG_FILE_PATH" |
| 90 | elif [ "$LOG_FILE_PATH" = "syslog" ] ; then |
| 91 | LOG_FILE_NAME="" |
| 92 | echo \*\*\* |
| 93 | echo Exim is using the syslog interface for its log data. If you redirect all |
| 94 | echo MAIL.INFO syslog messages into a separate file, you can point eximon at |
| 95 | echo that file with the EXIMON_LOG_FILE_PATH environment variable. |
| 96 | echo \*\*\* |
| 97 | else |
| 98 | LOG_FILE_NAME=`echo $LOG_FILE_PATH | \ |
| 99 | sed -e 's/ *: *syslog *: */:/' \ |
| 100 | -e 's/ *: *syslog *$//' \ |
| 101 | -e 's/^ *syslog *: *//' \ |
| 102 | -e 's/%s/main/'` |
| 103 | if [ "$LOG_FILE_NAME" = "" ] ; then |
| 104 | LOG_FILE_NAME=$SPOOL_DIRECTORY/log/mainlog |
| 105 | fi |
| 106 | fi |
| 107 | |
| 108 | # The basename and hostname commands vary from system to system |
| 109 | |
| 110 | basename=BASENAME_COMMAND |
| 111 | hostname=HOSTNAME_COMMAND |
| 112 | |
| 113 | # SunOS5 is a pain in that they may be in one of two places. So is Linux |
| 114 | # in the case of basename. Set up a general mechanism for searching for |
| 115 | # them in several places. |
| 116 | |
| 117 | if [ "${basename}" = "look_for_it" ] ; then |
| 118 | if [ -f /usr/bin/basename ] ; then |
| 119 | basename=/usr/bin/basename |
| 120 | else |
| 121 | if [ -f /bin/basename ] ; then |
| 122 | basename=/bin/basename |
| 123 | else |
| 124 | basename=/usr/ucb/basename |
| 125 | fi |
| 126 | fi |
| 127 | fi |
| 128 | |
| 129 | if [ "${hostname}" = "look_for_it" ] ; then |
| 130 | if [ -f /usr/bin/hostname ] ; then |
| 131 | hostname=/usr/bin/hostname |
| 132 | else |
| 133 | if [ -f /bin/hostname ] ; then |
| 134 | hostname=/bin/hostname |
| 135 | else |
| 136 | hostname=/usr/ucb/hostname |
| 137 | fi |
| 138 | fi |
| 139 | fi |
| 140 | |
| 141 | # Set hostname to the full hostname with the specified domain |
| 142 | # stripped off its end. On Solaris 2, the default basename |
| 143 | # command treats its suffix argument as a pattern. Consequently, |
| 144 | # if fullhostname contains no dots but ends with what looks like |
| 145 | # the domain, straightforward use of basename screws things up. |
| 146 | # Use a general test for this case, just in case any other OS |
| 147 | # do the same. |
| 148 | |
| 149 | fullhostname=`${hostname}` |
| 150 | case `${basename} abc .c` in |
| 151 | a) hostname=`${basename} ${fullhostname} '\.'${DOMAIN}` ;; |
| 152 | *) hostname=`${basename} ${fullhostname} .${DOMAIN}` ;; |
| 153 | esac |
| 154 | |
| 155 | |
| 156 | # Arrange for the window title field to be substituted by the shell |
| 157 | # so that it can contain either the full or the short host name. This |
| 158 | # is a tedious little bit of magic, but I don't know how to do it |
| 159 | # in a less tortuous way. |
| 160 | |
| 161 | WINDOW_TITLE=`fullhostname=${fullhostname} hostname=${hostname} /bin/sh <<xx |
| 162 | echo ${WINDOW_TITLE} |
| 163 | xx |
| 164 | ` |
| 165 | |
| 166 | # Add the X11 library to the library path, and then export the |
| 167 | # environment variables used by eximon. The string X11-LD-LIBRARY |
| 168 | # (with underscores, not hyphens) below is replaced by the configured |
| 169 | # library name when the script is built. (Hyphens are used in the description |
| 170 | # to stop it getting changed there too.) |
| 171 | |
| 172 | X11LIB=X11_LD_LIBRARY |
| 173 | |
| 174 | if [ "${LD_LIBRARY_PATH}" = "" ] ; then |
| 175 | LD_LIBRARY_PATH=${X11LIB} |
| 176 | else |
| 177 | LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${X11LIB} |
| 178 | fi |
| 179 | |
| 180 | export EXIM_PATH LD_LIBRARY_PATH \ |
| 181 | LOG_BUFFER LOG_DEPTH LOG_FILE_NAME LOG_FONT LOG_WIDTH \ |
| 182 | ACTION_OUTPUT ACTION_QUEUE_UPDATE\ |
| 183 | MENU_EVENT MIN_HEIGHT MIN_WIDTH \ |
| 184 | QUALIFY_DOMAIN QUEUE_DEPTH QUEUE_FONT QUEUE_INTERVAL QUEUE_MAX_ADDRESSES \ |
| 185 | QUEUE_STRIPCHART_NAME QUEUE_TOTAL QUEUE_WIDTH SPOOL_DIRECTORY \ |
| 186 | START_DEPTH LOG_STRIPCHARTS SIZE_STRIPCHART SIZE_STRIPCHART_NAME \ |
| 187 | START_SMALL STRIPCHART_INTERVAL \ |
| 188 | TEXT_DEPTH WINDOW_TITLE |
| 189 | |
| 190 | # Exec to the program we really want to run, thereby continuing in |
| 191 | # just the one process, and let it run in parallel with whatever |
| 192 | # called this script (unless gdb was requested in original $1). |
| 193 | |
| 194 | if [ "${use_gdb:-}" = "" ] ; then |
| 195 | exec "${EXIMON_BINARY}" $cmd_args & |
| 196 | else |
| 197 | exec "$use_gdb" "${EXIMON_BINARY}" $cmd_args |
| 198 | # not backgrounded |
| 199 | fi |
| 200 | |
| 201 | # End |