revert "%s" addition in em_main.c, broke %D in log_file.
[exim.git] / src / src / eximon.src
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 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