]> CyberLeo.Net >> Repos - FreeBSD/releng/9.2.git/blob - contrib/dialog/samples/copifuncs/copi.funcs
- Copy stable/9 to releng/9.2 as part of the 9.2-RELEASE cycle.
[FreeBSD/releng/9.2.git] / contrib / dialog / samples / copifuncs / copi.funcs
1 #!/bin/bash
2 # $Id: copi.funcs,v 1.3 2001/01/15 22:24:26 tom Exp $
3 #  ComeOn Point Functions! v0.9.2
4 #  - usate da vari altri moduli ComeOn Point...
5 #
6 #  AUTHOR: Beppe (beppe.dem@nsm.it)
7 #
8 #  This program is free software; you can redistribute it and/or
9 #  modify it under the terms of the GNU General Public License
10 #  as published by the Free Software Foundation; either version 2
11 #  of the License, or (at your option) any later version.
12 #
13 #  This program is distributed in the hope that it will be useful,
14 #  but WITHOUT ANY WARRANTY; without even the implied warranty of
15 #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 #  GNU General Public License for more details.
17 #
18 #  You should have received a copy of the GNU General Public License
19 #  along with this program; if not, write to the Free Software
20 #  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 #
22
23 HOST=`hostname`
24 DOMAIN=`hostname -d`
25 PKTNAME="ComeOn Point Installer!"
26 COMEONDIR=/usr/lib/ComeOn
27
28 AKASETUP=$COMEONDIR/point/.akasetup
29 COPIUSER=$COMEONDIR/point/.copi.user
30 EMSIFILE=$COMEONDIR/point/.emsi
31 PNTSETUP=$COMEONDIR/point/.pntsetup
32
33 mkstemp() {
34   eval 'tmp_'$1'=`tempfile 2>/dev/null` || tmp_'$1'=/tmp/'$1'$$'
35 }
36
37 # Args: [start_uid]
38 # Returns: $FOUND_UID
39 find_unused_uid() {
40
41   if [ $1 ]; then
42     FOUND_UID=$1
43   else
44     FOUND_UID=501
45   fi
46
47   while [ "`cut -f3 -d: /etc/passwd | grep -x $FOUND_UID`" ]
48   do
49     FOUND_UID=$[$FOUND_UID+1]
50   done
51 }
52
53 int2fido() {
54  _RETVAL="`echo $1 | cut -f3 -d. | cut -c2-`:\
55 `echo $1 | cut -f2 -d. | cut -c2-`/\
56 `echo $1 | cut -f1 -d. | cut -c2-`"
57 }
58 int2fidonet() {
59  _RETVAL="`echo $1 | cut -f3 -d. | cut -c2-`:\
60 `echo $1 | cut -f2 -d. | cut -c2-`/\
61 `echo $1 | cut -f1 -d. | cut -c2-`@\
62 `echo $1 | cut -f4- -d.`"
63 }
64 fido2int() {
65  _RETVAL="f\
66 `echo $1 | cut -f2 -d '/'`.n\
67 `echo $1 | cut -f1 -d '/' | cut -f2 -d:`.z\
68 `echo $1 | cut -f1 -d '/' | cut -f1 -d:`"
69 }
70 fidonet2int() {
71  _RETVAL="f\
72 `echo $1 | cut -f2 -d/ | cut -f1 -d@`.n\
73 `echo $1 | cut -f1 -d/ | cut -f2 -d:`.z\
74 `echo $1 | cut -f1 -d/ | cut -f1 -d:`.\
75 `echo $1 | cut -f2 -d@`"
76 }
77 fidonetpoint2int() {
78  _RETVAL="p\
79 `echo $1 | cut -f2 -d. | cut -f1 -d@`.f\
80 `echo $1 | cut -f2 -d/ | cut -f1 -d.`.n\
81 `echo $1 | cut -f2 -d: | cut -f1 -d/`.z\
82 `echo $1 | cut -f1 -d/ | cut -f1 -d:`.\
83 `echo $1 | cut -f2 -d@`.org"
84 }
85
86 # Parameters: fqdn
87 configure_loopback() {
88   dialog --backtitle "$TITLE" --infobox "Configuro la rete (in modo loopback)..." 0 0
89     
90   FQDN=$1
91   HOST=`echo $FQDN | cut -f1 -d.`
92   DOMAIN=`echo $FQDN | cut -f2- -d.`
93
94   save /etc/hostname
95   echo $FQDN >/etc/HOSTNAME
96   export HOSTNAME=$FQDN
97   hostname $HOST
98
99   save /etc/rc.d/rc.inet1
100   cat <<EOF >/etc/rc.d/rc.inet1 
101 #! /bin/sh
102 #
103 # rc.inet1      This shell script boots up the base INET system.
104
105 # Attach the loopback device.
106 /sbin/ifconfig lo 127.0.0.1
107 /sbin/route add -net 127.0.0.0
108
109 # End of rc.inet1
110 EOF
111   chmod 755 /etc/rc.d/rc.inet1
112
113
114   save /etc/networks
115   cat <<EOF >/etc/networks
116 #
117 # networks      This file describes a number of netname-to-address
118 #               mappings for the TCP/IP subsystem.  It is mostly
119 #               used at boot time, when no name servers are running.
120 #
121
122 loopback        127.0.0.0
123
124 # End of networks.
125 EOF
126   chmod 644 /etc/networks
127
128
129   save /etc/hosts
130   cat <<EOF >/etc/hosts
131 #
132 # hosts         This file describes a number of hostname-to-address
133 #               mappings for the TCP/IP subsystem.  It is mostly
134 #               used at boot time, when no name servers are running.
135 #               On small systems, this file can be used instead of a
136 #               "named" name server.  Just add the names, addresses
137 #               and any aliases to this file...
138 #
139 # By the way, Arnt Gulbrandsen <agulbra@nvg.unit.no> says that 127.0.0.1
140 # should NEVER be named with the name of the machine.  It causes problems
141 # for some (stupid) programs, irc and reputedly talk. :^)
142 #
143 # But we (ComeOn Linux!) says that this is not valid for you, because
144 # you resulted to have not a network at the installation time.
145
146 # For loopbacking.
147 127.0.0.1       localhost       $FQDN   $HOST
148
149 # End of hosts.
150 EOF
151   chmod 644 /etc/hosts
152
153   save /etc/resolv.conf
154   echo domain $DOMAIN >/etc/resolv.conf
155   chmod 644 /etc/resolv.conf
156
157   save /etc/host.conf
158   cat <<EOF >/etc/host.conf
159 order hosts,bind
160 multi on
161 EOF
162   chmod 644 /etc/host.conf
163
164   /etc/rc.d/rc.inet1
165 }
166
167 # Private function, adds an user to a group. Args: user, group
168 add_to_group() {
169
170   if [ ! "`groups \"$1\" | grep \" $2 \"`" ]
171   then
172     USERS="`grep \"$2:\" /etc/group | cut -s -f4 -d:`"
173
174     mkstemp group
175     if [ "$USERS" ]; then
176       sed "/$2:/s/:$USERS/:$USERS,$1/" /etc/group >$tmp_group
177     else
178       sed "/$2:/s/:/:$1/3" /etc/group >$tmp_group
179     fi
180
181     save /etc/group
182     mv $tmp_group /etc/group
183   fi
184 }
185
186 # Arguments: user, fullname
187 add_postmaster() {
188   dialog --backtitle "$TITLE" --infobox "Creo l'user principale e/o ne adatto le informazioni..." 0 0
189
190   USER="$1"
191   NAME="$2"
192   HOMEDIR="/home/$USER"
193
194 #  echo "$USER" >$COPIUSER      # you've to do this in any other location
195   ENTRY="`cut /etc/passwd -s -f1,2,5 -d: | grep $USER:`"
196   if [ "$ENTRY" ]
197   then
198     OLDNAME="`echo $ENTRY | cut -f3 -d:`"
199     PASW="`echo $ENTRY | cut -f2 -d:`"
200     if [ "$OLDNAME" != "$NAME" ]
201     then
202       mkstemp passwd
203       sed "/$USER:$PASW:/s/:$OLDNAME:/:$NAME:/" /etc/passwd >$tmp_passwd
204       save /etc/passwd
205       mv $tmp_passwd /etc/passwd
206     fi
207
208     add_to_group "$USER" mail
209   else
210     if [ -f /bin/bash ]; then USERSHELL=/bin/bash; else USERSHELL=""; fi
211     find_unused_uid
212     echo "$USER:*:$FOUND_UID:12:$NAME:$HOMEDIR:$USERSHELL" >>/etc/passwd
213     mkdir -p $HOMEDIR -m 755
214     chown $USER.mail $HOMEDIR
215   fi
216 }
217
218 comment_nntp_in_inetdconf() {
219   dialog --backtitle "$TITLE" --infobox "Commento la riga 'nntp' in /etc/inetd.conf..." 0 0
220
221   mkstemp inetd
222   sed "/in.nntpd/s/nntp/#&/" /etc/inetd.conf >$tmp_inetd
223   save /etc/inetd.conf
224   mv $tmp_inetd /etc/inetd.conf
225   killall -1 inetd
226 }
227
228 # Args: organization
229 set_organization() {
230   dialog --backtitle "$TITLE" --infobox "Imposto l' origin..." 0 0
231
232   ORGANIZATION=/etc/organization
233   save $ORGANIZATION 
234
235   NEW_ORGANIZATION="$1"
236   echo "$NEW_ORGANIZATION" >$ORGANIZATION
237 }
238
239 create_innconf_newsfeeds_distrib() {
240   dialog --backtitle "$TITLE" --infobox "Creo i files di configurazione principali di InterNet News (inn)..." 0 0
241
242 # File: inn.conf
243   INNCONF=~news/inn.conf
244   save $INNCONF
245
246   cat <<EOF >$INNCONF
247 ##  $Revision: 1.3 $
248 ##  inn.conf -- inn configuration data
249 ##  Format:
250 ##      <parameter>:<whitespace><value>
251 ##  Used by various programs and libinn.  The following parameters are defined:
252 ##      domain          Local domain, without leading period.
253 ##      fromhost        What to put in the From line; default is FQDN
254 ##                      of the local host.
255 ##      moderatormailer Where to mail moderated postings, if not found
256 ##                      in the moderators file; see moderators(5).
257 ##      pathhost        What to put in the Path and Xref headers; default
258 ##                      is FQDN of the local host.
259 ##      organization    If $ORGANIZATION doesn't exist.  What to put in
260 ##                      the Organization header if blank.
261 ##      server          If $NNTPSERVER doesn't exist.  Local NNTP server
262 ##                      host to connect to.
263 ##
264
265 server:         $HOST.$DOMAIN
266 domain:         $DOMAIN
267 pathhost:       $HOST
268 EOF
269
270   chmod 444 $INNCONF
271   chown news.news $INNCONF
272
273
274 # File: newsfeeds
275   NEWSFEEDS=~news/newsfeeds
276   save $NEWSFEEDS
277
278   echo -e "ME:*::\n" >$NEWSFEEDS
279
280   IAKA=1
281   OK=1
282   while [ "$OK" != 0 ]
283   do
284     AKA="`cut $AKASETUP -f$IAKA -d:`"
285     if [ ! "$AKA" ]
286     then
287       OK=0
288     else
289       if [ $IAKA != 1 ]
290       then
291         TMPAKA="`echo $AKA | cut -f-4 -d.`"
292         SENDCRON="$SENDCRON $TMPAKA"
293         echo -n "$TMPAKA/" >>$NEWSFEEDS
294       fi
295       TMPAKA="`echo $AKA | cut -f1-2 -d.`"
296       if [ $IAKA = 1 ]; then
297         SENDCRON="$SENDCRON $TMPAKA"
298       fi
299       echo -e "$TMPAKA\\" >>$NEWSFEEDS
300       echo -e "\t:!*,`echo $AKA | cut -f4 -d.`.*\\" >>$NEWSFEEDS
301       echo -e "\t:Tf,Wfb,B4096/1024:\n" >>$NEWSFEEDS
302     fi
303     IAKA=$[$IAKA+1]
304   done
305
306   chmod 444 $NEWSFEEDS
307   chown news.news $NEWSFEEDS
308
309
310 # File: distrib.pats
311   DISTRIB=~news/distrib.pats
312   save $DISTRIB
313
314   IAKA=1
315   OK=1
316   while [ "$OK" != 0 ]; do
317     AKA="`cut $AKASETUP -f$IAKA -d:`"
318     IAKA=$[$IAKA+1]
319     if [ "$AKA" = "" ]; then
320       OK=0
321     else
322       DOM="`echo $AKA | cut -f4 -d.`"
323       echo "10:$DOM.*:$DOM" >>$DISTRIB
324     fi
325   done
326
327   chmod 444 $DISTRIB
328   chown news.news $DISTRIB
329 }
330
331 # Args: num_of_days
332 create_expirectl() {
333   dialog --backtitle "$TITLE" --infobox "Imposto il periodo di transito dei messaggi..." 0 0
334
335   EXPIRECTL=~news/expire.ctl
336   save $EXPIRECTL
337
338   EXPIRE_DAYS=$1
339
340   echo -e "/remember/:14\n\n*:A:2:$EXPIRE_DAYS:$EXPIRE_DAYS" >$EXPIRECTL
341
342   chmod 440 $EXPIRECTL
343   chown news.news $EXPIRECTL
344 }
345
346 create_nnrpaccess() {
347   dialog --backtitle "$TITLE" --infobox "Rendo accessibili le news in lettura..." 0 0
348
349   NNRPACCESS=~news/nnrp.access
350   save $NNRPACCESS
351
352   cat <<EOF >$NNRPACCESS
353 ##  $Revision: 1.3 $
354 ##  nnrp.access - access file for on-campus NNTP sites
355 ##  Format:
356 ##      <host>:<perm>:<user>:<pass>:<groups>
357 ##  Connecting host must be found in this file; the last match found is
358 ##  used, so put defaults first.
359 ##      <host>          Wildcard name or IP address
360 ##      <perm>          R to read; P to post
361 ##      <user>          Username for authentication before posting
362 ##      <pass>          Password, for same reason
363 ##      <groups>        Newsgroup patterns that can be read or not read
364 ##  To disable posting put a space in the <user> and <pass> fields, since
365 ##  there is no way for client to enter one.
366 ##
367 ## Default is no access, no way to authentication, and no groups.
368 # *:: -no- : -no- :!*
369 ##  Foo, Incorporated, hosts have no password, can read anything.
370 # *.foo.com:Read Post:::*
371
372 *:: -no- : -no- :!*
373 localhost.$DOMAIN:Read Post:::*
374 $HOST.$DOMAIN:Read Post:::*
375
376 EOF
377
378   chmod 440 $NNRPACCESS 
379   chown news.news $NNRPACCESS 
380 }
381
382 create_hostsnntp() {
383   dialog --backtitle "$TITLE" --infobox "Rendo accessibili le news in scrittura..." 0 0
384
385   HOSTSNNTP=~news/hosts.nntp
386   save $HOSTSNNTP
387
388   cat <<EOF >$HOSTSNNTP
389 ##  $Revision: 1.3 $
390 ##  hosts.nntp - names and addresses that feed us news
391 ##  Format
392 ##      <host>:
393 ##      <host>:<password>
394 ##  <host> can be a name or IP address; no wildcards.  Any hosts not
395 ##  listed here are handed off to nnrpd.
396
397 $HOST.$DOMAIN:
398
399 EOF
400     
401   chmod 440 $HOSTSNNTP
402   chown news.news $HOSTSNNTP 
403 }
404
405 create_dirs_and_files() {
406
407   CURMASK=`umask`
408   . ./copi.wheel
409   pushd /var/log >/dev/null
410   mkdir -p news -m 755; chown news.news news
411   cd /var/log/news; mkdir -p OLD -m 755; chown news.news OLD
412   cd /var/spool; mkdir -p news -m 775; chown news.news news
413   cd /var/spool/news; umask 02
414   mkdir -p out.going control junk in.coming
415   chown news.news out.going control junk in.coming
416   cd in.coming; mkdir -p bad tmp; chown news.news bad tmp; umask $CURMASK
417   ln -sf ~news /usr/local/lib/
418   ln -sf ~news/inews /usr/bin/
419   chmod 1777 /var/tmp
420
421   cd /var/spool
422   mkdir -p uucppublic
423   chown uucp.uucp uucppublic
424   chmod 1777 uucppublic
425
426   cd ~news
427   touch history history.dir history.pag errlog log
428   chown news.news history* log errlog
429   chmod 664 history* log errlog
430
431   save active
432   echo "control 0000000000 0000000001 y" > active
433   echo "junk 0000000000 0000000001 y" >> active
434   chown news.news active
435
436   save active.times  
437   echo "control 814573260 usenet" > active.times
438   echo "junk 814573260 usenet" >> active.times
439   chown news.news active.times
440
441   save newsgroups
442   :>newsgroups
443   chown news.news newsgroups
444
445   popd >/dev/null
446 }
447
448 install_rcnews() {
449   dialog --backtitle "$TITLE" --infobox "Avvio l'InterNet News daemon (innd) e l'installo negli script di boot, attendere... attenzione che e' probabile che in questa fase non sia possibile entrare da un'altra VC come root." 0 0
450
451   RCLOCAL=/etc/rc.d/rc.local
452   RCNEWS=~news/etc/rc.news
453   RCLINE="`grep $RCNEWS $RCLOCAL`"
454
455   if [ ! "$RCLINE" -o `echo $RCLINE | cut -c1` = '#' ]
456   then
457     save $RCLOCAL
458     echo -e "\n$RCNEWS" >>$RCLOCAL
459   fi
460
461   cp copi.rcnews $RCNEWS
462   chmod 550 $RCNEWS
463   chown news.news $RCNEWS 
464
465   if [ -f ~news/innd/innd.pid ]; then
466     su -l news -c "bin/ctlinnd shutdown x" >/dev/null
467     sleep 2     # wait for server to shutdown
468   fi
469
470   killall innd 2>/dev/null      # make sure it's gone down
471   $RCNEWS
472 }
473
474 install_crontab_news() {
475   dialog --backtitle "$TITLE" --infobox "Imposto la crontab di news per l'automantenimento del sistema (cancellazione giornaliera dei messaggi vecchi et similia)..." 0 0
476
477
478   if [ -f $COPIUSER ]; then
479     POSTMST="`cat $COPIUSER`"
480   else
481     POSTMST="root"
482   fi
483
484   NEWSHOME=~news
485   save /var/spool/cron/crontabs/news
486   cat <<EOF | crontab - -u news
487 #-------------------------------------------------------------------------------
488 # /var/spool/cron/crontabs/news
489 SHELL=/bin/sh
490 #
491 MAILTO=$POSTMST
492 #
493 #===============================================================================
494 #
495 # inn-1.4 (Inter Net News)
496 #
497 #===============================================================================
498 #
499 #-------------------------------------------------------------------------------
500 # Daily housekeeping ... expires news and other things ...
501 #-------------------------------------------------------------------------------
502 #
503 51 16 * * *     $NEWSHOME/bin/news.daily < /dev/null
504 #
505 #-------------------------------------------------------------------------------
506 # offer spooled news - that was spooled into the incoming directory when the 
507 # innd server wasn't available - again to the innd server.
508 #-------------------------------------------------------------------------------
509 #
510 18 * * * *      $NEWSHOME/rnews -U
511
512 #-------------------------------------------------------------------------------
513 # send news batches to your fidonet(-like) news feeds 
514 #-------------------------------------------------------------------------------
515 #
516 49 16 * * *     $NEWSHOME/send-ifmail$SENDCRON
517 #
518 #-------------------------------------------------------------------------------
519 #
520 EOF
521
522   echo $NEWSHOME/send-ifmail$SENDCRON >/etc/point.ifsend
523 }
524
525 # Private func
526 # Args: dir_with_sources, bindir, cfgdir, logdir, version
527 copi.ifmCfg() {
528
529   SRCDIR="$1"
530   BINDIR="$2"
531   CFGDIR="$3"
532   LOGDIR="$4"
533   VERSION="$5"
534   SOURCE="$SRCDIR/CONFIG"
535   CONFIGFILE="$CFGDIR/config"
536
537   cat <<EOF >$SOURCE
538 # Compile-time configuration for ifmail FidoNet mailer and gateway
539 COPYRIGHT   = "Eugene G. Crosser, 1993-1995"
540 VERSION     = "$VERSION"
541
542 # Main configuration file. This default may be overwritten by -I key.
543 CONFIGFILE  = $CONFIGFILE
544
545 # Debug messages turned on by -x key are written here.
546 # Some error messages may occationally appear here too.
547 # This may be changed in the 'config' file.
548 DEBUGFILE   = "$LOGDIR/ifdebug"
549
550 # Procession log. Usually gets several lines for each invocation.
551 # Also look for error diagnostics here.  If HAS_SYSLOG defined,
552 # only stdout and stderr from the packers and unpackers go to this
553 # file, while actual logging is done via syslog() calls.
554 # This may be changed in the 'config' file.
555 LOGFILE     = "$LOGDIR/iflog"
556
557 # Use syslog() facility codes for mail gate, news gate and ifcico.
558 # Define -DHAS_SYSLOG (see below)
559 #MAILLOG    = LOG_MAIL
560 MAILLOG    = LOG_LOCAL0
561 #NEWSLOG    = LOG_NEWS
562 NEWSLOG    = LOG_LOCAL0
563 #CICOLOG    = LOG_UUCP
564 CICOLOG    = LOG_LOCAL0
565
566 # Directory where UUCP lock files reside.
567 #LOCKDIR     = "/var/lock"
568 LOCKDIR     = "/var/spool/uucp"
569
570 # Directory from which file requests are resolved.
571 # This may be changed from the 'config' file.
572 #PUBDIR      = "/home/ftp/pub"
573 PUBDIR      = "/var/spool/uucppublic"
574
575 # Compile-time system-dependant options. 
576
577 # If you specify "-DHAS_NDBM_H", ndbm calls will be used instead
578 # of dbm ones, and the feature will be activated of Cnews log processing
579 # to add entries to SEEN-BY if echo message is exported to several FTN
580 # nodes by Cnews mechanism. This works with INN too.
581
582 # If you specify "-DHAS_STATFS" or "-DHAS_STATVFS", statfs() (or statvfs()
583 # respectivly) call will be used to check available disk space. For statfs()
584 # call, you must also specify which .h file to use: "-DSTATFS_IN_VFS_H" or 
585 # "-DSTATFS_IN_STATFS_H" or "-DSTATFS_IN_STATVFS_H"  or "-DSTATFS_IN_MOUNT_H". 
586 # For statvfs() call, statvfs.h is included.
587
588 # define -DSCO_STYLE_STATFS if your statfs() call requires 4 arguments.
589
590 # If you specify "-DHAS_SETSID", setsid() call is used to detach from the
591 # control terminal. Otherwise setpgrp() call is used, and in this case you
592 # may specify "-DBSD_SETPGRP" to use BSD-style call.  Used in ifcico only.
593
594 # If you specify "-DDONT_HAVE_TM_GMTOFF", timezone offset will be calculated
595 # from the difference between the results of localtime() and gmtime() calls
596 # instead of using tm_gmtoff field of struct tm.
597
598 # If you specify "-DDONT_HAVE_GETOPT", local definitions for getopt will
599 # be used (but not the function itself)
600
601 # For ifcico, you must specify -DHAS_TERMIOS_H (preffered), -DHAS_TERMIO_H
602 # or -DHAS_SGTTY_H to use POSIX-y, SysV-ish of BSD-ish terminal control.
603
604 # in SVR4 you should specify -DHAS_DIAL (and maybe -DHAS_DIAL_H) to use
605 # dial() library function instead of regular open().  Lock files are
606 # not used in this case.
607
608 # for uucp lock files, you must specify either -DASCII_LOCKFILES or
609 # -DBINARY_LOCKFILES
610
611 # define -DHAS_FSYNC if there is a fsync() system call (to update .flo
612 # files)
613
614 # define -DPARANOID if you want iftoss to deny packets with wrong password.
615
616 # define -DRELAXED if you want iftoss to accept packets that are not
617 # addressed to your node.
618
619 # define -DFORCEINTL if you want ifmail to create ^aINTL even if this is
620 # not an inter-zone netmail.
621
622 # define -DNEED_UUCPFROM if your MTA needs a uucp "From" line in mail.
623
624 # define -DHAS_TCP if you want ifmail to be able to originate outgoing
625 # connections over TCP/IP (socket library needed)
626
627 # define -DHAS_TERM if you want ifmail to be able to originate outgoing
628 # connections over TERM (TCP "extention", client.a needed)
629
630 # define -DHAS_REGEX_H or -DHAS_LIBGEN_H if you have either of these
631 # header files for regular expression handlers.
632
633 # define -DHAS_SYSLOG to use syslog() instead of logging to files.
634 # Files are necessary anyway, external programs' stdout and stderr
635 # are redirected there.
636
637 # define -DNEED_BSY if you want ifpack and ifcico to create .bsy
638 # files preventing simultaneous processing of the same node.
639
640 # define -DNEED_FORK if your system is uncapable of getting rid of the
641 # control terminal unless you are running not as a group leader.
642
643 # define -DREGEX_NEED_CARET if your re_comp/re_exec require that the
644 # mask starts with a '^' to match the beginning of the string.
645
646 # as of June 1994, FreeBSD has a nasty bug in the kernel lseek() code:
647 # if you make lseek() to a point before the start of the file, it
648 # succeeds and the writing point becomes negative.  Fortunately, 
649 # subsequent write()s fail :-).  To overwork this, define 
650 # -DNEGATIVE_SEEK_BUG, this will add an extra fseek() to restore
651 # zero writing point where necessary.
652
653 # define -DNEED_TRAP if you want debugging information when the programs
654 # are aborted with segmentation fault etc.  Currently tested and works 
655 # only with Linux, and only with newer kernels (1.1.20+)
656
657 # define -DSLAVE_SENDS_NAK_TOO if you have problems answering incoming
658 # EMSI sessions originated by FrontDoor.  FrontDoor does not follow
659 # EMSI specifications when originating calls, this is a workaround.
660
661 # define -DDONT_HAVE_DIRENT if there is no working opendir()/readdir()
662 # etc. in your libc.  You will aso need to add "dirent.o" to the NEEDED
663 # (see below).
664
665 # Linux:
666 OPTS        = -DHAS_STATFS -DSTATFS_IN_VFS_H -DHAS_SETSID -DHAS_NDBM_H \\
667                 -DDONT_HAVE_TM_GMTOFF -DHAS_TERMIOS_H -DASCII_LOCKFILES \\
668                 -DHAS_FSYNC -DHAS_IOCTL_H -DHAS_REGEX_H -DHAS_TCP \\
669                 -DFORCEINTL -DHAS_SYSLOG -DNEED_UUCPFROM -DNEED_BSY \\
670                 -DREGEX_NEED_CARET -DNEED_TRAP -DSLAVE_SENDS_NAK_TOO \\
671                 -DNEED_FORK -DLESS_RFC_KLUDGES
672
673 # 386BSD:
674 #OPTS        = -DHAS_STATFS -DSTATFS_IN_MOUNT_H -DHAS_SETSID -DHAS_NDBM_H \\
675                 -DHAS_TERMIOS_H -DASCII_LOCKFILES -DHAS_FSYNC -DHAS_IOCTL_H \\
676                 -DHAS_REGEX_H -DHAS_TCP -DHAS_SYSLOG -DNEED_UUCPFROM \\
677                 -DNEED_BSY -DNEED_FORK -DNEGATIVE_SEEK_BUG \\
678                 -DREGEX_NEED_CARET
679
680 # SVR4:
681 #OPTS        = -DHAS_STATVFS -DDONT_HAVE_TM_GMTOFF -DHAS_SETSID -DHAS_NDBM_H \\
682                 -DHAS_TERMIOS_H -DHAS_DIAL -DHAS_DIAL_H -DASCII_LOCKFILES \\
683                 -DHAS_FSYNC -DHAS_IOCTL_H -DHAS_LIBGEN_H -DHAS_TCP \\
684                 -DHAS_SYSLOG -DREGEX_NEED_CARET
685 # SunOS:
686 #OPTS        = -DHAS_STATFS -DSTATFS_IN_VFS_H -DHAS_SETSID -DHAS_NDBM_H \\
687                 -DDONT_HAVE_GETOPT -DHAS_TERMIOS_H -DASCII_LOCKFILES \\
688                 -DHAS_FSYNC -DHAS_TCP -DHAS_SYSLOG \\
689                 -DREGEX_NEED_CARET
690
691 # SCO Unix 3.2v4.2
692 #OPTS        = -DHAS_STATFS -DSTATFS_IN_STATFS_H -DSCO_STYLE_STATFS \\
693                 -DHAS_TERMIOS_H -DDONT_HAVE_TM_GMTOFF -DDO_NEED_TIME \\
694                 -DDONT_HAVE_GETOPT -DASCII_LOCKFILES -DHAS_IOCTL_H \\
695                 -DHAS_TCP -DHAS_SYSLOG \\
696                 -DREGEX_NEED_CARET
697
698 # ISC Unix 3.2 v3.0
699 #OPTS        = -DHAS_STATFS -DSTATFS_IN_STATFS_H -DHAS_TERMIO_H \\
700                 -DDONT_HAVE_TM_GMTOFF -DDONT_HAVE_GETOPT \\
701                 -DASCII_LOCKFILES -DHAS_IOCTL_H -DSCO_STYLE_STATFS \\
702                 -DUSE_POLL -DHAS_NET_ERRNO_H -DSHORT_PID_T \\
703                 -DHAS_TCP -DHAS_SYSLOG \\
704                 -DREGEX_NEED_CARET
705 # On ISC, if you are suing gcc, you can run into a trouble with sscanf()
706 # function.  It appears that sscanf(string,"%d.%d",&int1,&int2) where
707 # string is a constant segfaults unless you specify "-fwritable-strings"
708 # to gcc.  I would say that this is a bug in ISC libc.  If nessecary,
709 # add this to the defines above.  If you have ISC version 4.0 or later,
710 # you can add "-posix", remove "-DSHORT_PID_T" and specify "-DHAS_TERMIOS"
711 # to get benefit of posix terminal control.
712
713 # for make install, where to put binaries and what owner to set
714 BINDIR = $BINDIR
715 OWNER = fnet
716 GROUP = uucp
717 MODE = 0711
718 SMODE = 4711
719
720 INSTALL = install
721 RANLIB = ranlib
722 #RANLIB = touch
723 SHELL = /bin/sh
724 ECHO = echo -e
725 CC = gcc
726 YACC = bison -y
727 #YACC = yacc
728 LEX = flex
729 #LEX = lex
730 AWK = awk
731 TAR = tar
732
733 #CFLAGS = -g -Wall
734 # Linux, 386BSD, SunOS:
735 CFLAGS = -O2 -Wall -m486 -s
736 # SVR4:
737 #CFLAGS = -O -Xa
738
739 LDFLAGS = -s
740
741 # For LIBS, you may need to add "-lfl" if you are using flex 2.4.x
742 # If you need TERM also add e.g. "/usr/src/term112/client.a"
743
744 # Linux
745 LIBS = -ldbm
746 # SunOS:
747 #LIBS =
748 # 386BSD:
749 #LIBS = -lgdbm -lgnuregex
750 # SVR4
751 #LIBS = -ldbm -lform -lnsl -lsocket -lc -L/usr/ucblib -lucb
752 # SCO
753 #LIBS = -ldbm -lsocket -lintl
754 # ISC
755 #LIBS = -lcposix -lmalloc -ldbm -linet -lPW
756
757 INCLUDES = -I\${INCDIR}
758 # ISC
759 #INCLUDES = -I/usr/include/rpcsvc -I\${INCDIR}
760
761 # What programs are absent at your system?
762 #NEEDED = strcasestr.o strncasecmp.o strcasecmp.o rename.o mkdir.o usleep.o \\
763                 regexpr.o
764 # Linux
765 NEEDED =
766 # SVR4
767 #NEEDED = regexpr.o
768 # SCO
769 #NEEDED = strcasestr.o strncasecmp.o strcasecmp.o usleep.o regexpr.o
770 # SunOS and 386BSD
771 #NEEDED = signal.o
772 # ISC
773 #NEEDED = usleep.o regexpr.o vsyslog.o
774 EOF
775
776 }
777
778 # Args: package.tgz, bin_dir, cfg_dir, log_dir, version, where_to_put_src
779 install_ifmail() {
780   dialog --backtitle "$TITLE" --infobox "Installo e compilo Ifmail..." 0 0
781
782   AKAPRI="`cut $AKASETUP -f1 -d:`"
783   int2fido $AKAPRI
784   AKAPRIFTN=$_RETVAL
785
786   if [ -f $COPIUSER ]
787   then
788     POST="`cat $COPIUSER`"
789   else
790     POST=root
791   fi
792
793   TGZ="$1"
794   BINDIR="$2"
795   CFGDIR="$3"
796   LOGDIR="$4"
797   VERSION="$5"
798   SRC="$6"
799
800 ###################################################
801 ## passwd e group
802 ####################################
803
804   if [ "`cut /etc/passwd -f1 -d: | grep -x fnet`" ]
805   then
806     mkstemp passwd
807     grep -v "fnet:" /etc/passwd >$tmp_passwd
808     save /etc/passwd
809     mv $tmp_passwd /etc/passwd
810   fi
811
812   find_unused_uid 92
813   echo "fnet:*:$FOUND_UID:14:Fidonet Gate:$BINDIR:" >>/etc/passwd
814
815
816 ####################################################
817 #### dirs and files
818 ###################################
819   mkdir -p        $CFGDIR $LOGDIR /var/spool/ifmail/{BAK,nl.d} $BINDIR/magic
820   chown fnet.uucp $BINDIR{,/magic} $CFGDIR $LOGDIR /var/spool/ifmail/{,BAK,nl.d}
821   touch           $LOGDIR/{ifdebug,iflog,sysiflog,TheLog}
822   chown fnet.uucp $LOGDIR/{ifdebug,iflog,sysiflog,TheLog}
823
824 ##########################################################################
825 #### COMPILAZIONE
826 ####################################
827
828   SRC="$SRC/`tar zxvf $TGZ -C $SRC | head -1`"
829 # ora in $SRC c'e' il path completo dei source Ifmail
830
831   copi.ifmCfg $SRC $BINDIR $CFGDIR $LOGDIR $VERSION
832   patch -N -d $SRC <ifpatch 2>/dev/null
833   make clean -C $SRC
834   make -C $SRC
835 ##########################################################################
836 #### INSTALLAZIONE
837 ####################################
838   make install -C $SRC
839 }
840
841
842 # Args: bin_dir, cfg_dir, log_dir, passwords
843 #   note: passwords are colon-separated (":")
844 configure_ifmail() {
845   dialog --backtitle "$TITLE" --infobox "Configuro Ifmail..." 0 0
846
847   BINDIR=$1
848   CFGDIR=$2
849   LOGDIR=$3
850   PASSWDS=$4
851
852   SPD="`             cut $EMSIFILE -f1`"
853   SYSNAME="`         cut $EMSIFILE -f2`"
854   LOCATION="`        cut $EMSIFILE -f3`"
855   COMPLETE_PHONE="`  cut $EMSIFILE -f4`"
856   INTERCOUNTRYPREF="`cut $EMSIFILE -f5`"
857   LONG_DIST_PREFIX="`cut $EMSIFILE -f6`"
858   NODEFLAGS="`       cut $EMSIFILE -f7`"
859   DIALSTRING="`      cut $EMSIFILE -f8`"
860   SYSOP="`           cut $EMSIFILE -f9`"
861
862   COUNTRYPREF="`echo $COMPLETE_PHONE | cut -f1 -d'-'`"
863   PREF="`       echo $COMPLETE_PHONE | cut -f2 -d'-'`"
864   PHONE="`      echo $COMPLETE_PHONE | cut -f3 -d'-'`"
865
866   FNETCFG=$CFGDIR/config
867   AREAS=$CFGDIR/Areas
868
869   POINTS="`cat $PNTSETUP`"
870   POST="`cat $COPIUSER`"
871   AKAPRI="`cut $AKASETUP -f1 -d:`"
872   int2fido "$AKAPRI"
873   AKAPRIFTN="$_RETVAL"
874   
875 #invece di "cp $SRC/misc/inn/send-ifmail ~news"
876 #-----------------------------------------------------------------------------
877   cp copi.sendifm1 ~news/send-ifmail
878   cat <<EOF >>~news/send-ifmail
879 -p"$BINDIR/ifnews %s" \\
880 EOF
881   cat copi.sendifm2 >>~news/send-ifmail
882
883   chmod 550 ~news/send-ifmail
884   chown news.news ~news/send-ifmail
885
886 #invece di "cp $SRC/misc/contrib/ifreq $BINDIR"
887 #-----------------------------------------------------------------------------
888   cp copi.ifreq1 $BINDIR/ifreq
889   cat <<EOF >>$BINDIR/ifreq
890 # ifcico-config-file:
891 \$config = "$CFGDIR/config";
892
893 # change this to the default node, where requests should go to.
894 \$node = "$AKAPRIFTN";
895 EOF
896   cat copi.ifreq2 >>$BINDIR/ifreq
897
898   chmod 755 $BINDIR/ifreq
899   chown fnet.uucp $BINDIR/ifreq
900
901 #invece di "cp $SRC/misc/contrib/ifman $BINDIR"
902 #-----------------------------------------------------------------------------
903   cp copi.ifman1 $BINDIR/ifman
904   cat <<EOF >>$BINDIR/ifman
905 \$cfgfile="$CFGDIR/config";     # where the config is
906 \$ifowner="fnet";               # who is the owner of the ifmail
907
908 EOF
909   cat copi.ifman2 >>$BINDIR/ifman
910
911   chmod 755 $BINDIR/ifman
912   chown fnet.uucp $BINDIR/ifman
913
914 #invece di "cp $SRC/misc/contrib/ifpoll $BINDIR"
915 #-----------------------------------------------------------------------------
916   cp copi.ifpoll1 $BINDIR/ifpoll
917   cat <<EOF >>$BINDIR/ifpoll
918 FIDOPATH=$BINDIR
919 LOGPATH=$LOGDIR
920
921 # sysop of fido stuff
922 IFCICO_SYSOP=$POST
923
924 # my boss node (default address to poll)
925 NODE=$AKAPRI
926 EOF
927   cat copi.ifpoll2 >> $BINDIR/ifpoll
928
929   chmod 755 $BINDIR/ifpoll
930   chown fnet.uucp $BINDIR/ifpoll
931
932
933 #########################################################
934 ##### se in syslog.conf non c'e' "local0.*", lo aggiunge
935 ################################
936
937   SYSLOG="`grep \"local0.*      \" /etc/syslog.conf`"
938   SYSCHECK_A="`echo \"$SYSLOG\" | cut -f1  | grep -x \"local0.*\"`"
939   SYSCHECK_B="`echo \"$SYSLOG\" | cut -f2- | grep $LOGDIR/sysiflog`"
940   MYSYSLOG="local0.*\t\t\t\t\t$LOGDIR/sysiflog"
941
942   if [ ! "$SYSCHECK_A" -o ! "$SYSCHECK_B" ]
943   then
944     echo -e "\n# For ifmail" >> /etc/syslog.conf
945     echo -e "$MYSYSLOG" >>/etc/syslog.conf
946     killall -1 syslogd
947   fi
948
949
950 ########################
951   save $AREAS
952   :> $AREAS
953   chown fnet.uucp $AREAS
954
955   save $FNETCFG
956   cat <<EOF >$FNETCFG
957 # Configuration file for ifmail (ifgate+ifcico) package by Eugene Crosser
958 # Compile-time default name of this file may be overridden by -I key.
959 #
960 # Lines with the first nonblank character '#' are comments.
961 #
962 # Log file name. Overrides compile-time default.
963 logfile  $LOGDIR/iflog
964
965 # Debug file name. Overrides compile-time default.
966 debugfile $LOGDIR/ifdebug
967
968 # Debugging verbosity level (is overidden by -x key). Default is 0.
969 # WARNING: if >0 your messages will go in /tmp/ifmail !!!!!!!!!!!!!!!!!!
970 verbose  0
971
972 # The first is the main address:
973 EOF
974 #----------------------------
975
976   AKA="any"
977   IAKA=0
978   while [ "$AKA" ]
979   do
980     IAKA=$[$IAKA+1]
981     AKA="`cut $AKASETUP -f$IAKA -d:`"
982     if [ "$AKA" ]
983     then
984       int2fidonet $AKA
985       AKAFTN="`echo $_RETVAL | cut -f1 -d.`"
986       echo "# aka for `echo $AKAFTN | cut -f2 -d '@'`" >> $FNETCFG
987
988       POINT="`echo $POINTS | cut -f$IAKA -d:`"
989
990       AKAFTN="`echo $AKAFTN | cut -f1 -d '@'`.$POINT@`echo $AKAFTN | cut -f2 -d '@'`"
991     
992       echo "address  $AKAFTN" >> $FNETCFG
993     fi
994   done
995
996 #----------------------------
997   cat <<EOF >>$FNETCFG
998
999 # Passwords for nodes. Not checked by iftoss (unless -DPARANOID specified
1000 # at compile-time), checked by ifcico.
1001 # Inserted into outgoing mail packets, EMSI and yoohoo packets.
1002 EOF
1003 #----------------------------
1004
1005   AKA="any"
1006   IAKA=0
1007   while [ "$AKA" ]
1008   do
1009     IAKA=$[$IAKA+1]
1010     AKA="`cut $AKASETUP -f$IAKA -d:`"
1011     if [ "$AKA" ]
1012     then
1013       int2fido $AKA
1014       AKAFTN=$_RETVAL
1015
1016       PASSWD="`echo $PASSWDS | cut -f$IAKA -d:`"
1017       if [ "$PASSWD" ]
1018       then
1019         echo "password $AKAFTN $PASSWD" >> $FNETCFG
1020       fi
1021     fi
1022   done
1023
1024 #----------------------------
1025   cat <<EOF >>$FNETCFG
1026
1027 # Include config extention file (here: file with real passwords).
1028 # Includes may be nested. If the nesting is cyclic, the program cycles too.
1029 # You are warned.
1030 # include  $CFGDIR/passwds
1031
1032 # System alias file - try to fetch ftn-style aliases from there.
1033 # If "from" address of a message from FidoNet matches _right_ side
1034 # of some entry in sysalias file, then the Reply-To: header is created
1035 # in the RFC message with the name part taken from the left side of the
1036 # sysalis entry and domain part taken from myfqdn (below). E.g., if a 
1037 # fidonet message comes from "John Smith of 1:234/567.89@fidonet" and 
1038 # there is an entry in the sysalias file:
1039 # "jsmith: John.Smith@p89.f567.n234.z1.fidonet.org"
1040 # and fqdn value is "pccross.msk.su", then the resulting message will
1041 # contain a line: "Reply-To: jsmith@pccross.msk.su".
1042 sysalias /etc/aliases
1043
1044 # This host fully qualified domain name to add to the alias above
1045 myfqdn  `hostname -f`
1046
1047 # Directory for incoming packets/files:
1048 inbound  /var/spool/ifmail/inb
1049 # Directories for "listed" and "protected" sessions
1050 listinbound /var/spool/ifmail/inb
1051 protinbound /var/spool/ifmail/inb
1052
1053 # Directory for outgoing packets (default domain and zone):
1054 # other zones will be like "/var/spool/ifmail/outb.003",
1055 # other domains will be like "/var/spool/ifmail/<domain>.<zone>"
1056 outbound /var/spool/ifmail/outb
1057
1058 # Directory from which the file requests are satisfied
1059 public  /var/spool/uucppublic
1060
1061 # Directory with executables to satisfy "magic" file requests
1062 # if requested a file present in this directory, it will be
1063 # executed and stdout sent to the remote system. It is dangerous!
1064 # You are warned.
1065 magic  $BINDIR/magic
1066
1067 # Primary nodelist (serves "outbound" directory and domain from the
1068 # first "address" statement). Name expanded with ".NNN" if neccessary.
1069 nodelist /var/spool/ifmail/nl.d/`cut $AKASETUP -f1 -d: | cut -f4 -d.`.ndl
1070
1071 # Secondary nodelists and nodelists for other domains.
1072 # use directory name from the first "nodelist" statement.
1073 #           filename          originating address
1074 EOF
1075 #----------------------------
1076
1077   AKA="any"
1078   IAKA=0
1079   while [ "$AKA" ]
1080   do
1081     IAKA=$[$IAKA+1]
1082     AKA="`cut $AKASETUP -f$IAKA -d:`"
1083     if [ "$AKA" ]
1084     then
1085       int2fidonet $AKA
1086       AKAFTN="`echo $_RETVAL | cut -f1 -d.`"
1087       echo -e "nodelist  `echo $AKAFTN | cut -f2 -d '@'`.ndl\t$AKAFTN" >> $FNETCFG
1088     fi
1089   done
1090
1091 #----------------------------
1092   cat <<EOF >>$FNETCFG
1093
1094 # domain translations, just context substitution.  Leading dot recommended.
1095 # May contain '@'-sign too.  First matching used.
1096 # NOTE: If you specify at least one domtrans line, there will be _NO_
1097 # default for fidonet <--> fidonet.org.  Don't forget to specify it
1098 # explicitly as a last line.
1099 #               FTN side                        Internet side
1100 #domtrans       f720.n335.z2.fidonet.org        giuda.deis.unical.it
1101 #domtrans       .fidonet                        .fidonet.org
1102
1103 # Automatically updated alias database.  If omitted or inaccessible,
1104 # ^aREPLYADDR and ^aREPLYTO kludges are generated in fido messages.
1105 database        /var/spool/ifmail/ifdbm
1106
1107 # Sequencer file (used to generate unique IDs)
1108 sequencer       /var/spool/ifmail/seq
1109
1110 # Areas file (format: "AREA newsgroup distribution")
1111 areas           $CFGDIR/Areas
1112
1113 # Bad groups prefixes - do not pass to fido if appear in Newsgroups header
1114 # This is NOT the same as "!news.group" in the cnews "sys" file.
1115 # badgroup relcom.ads.
1116 # badgroup relcom.commerce.
1117
1118 # Maximum allowed number of groups in the Newsgroups header, article will
1119 # not be gated if exeeds.  If zero or umitted - no limit.
1120 # maxgroup    5
1121
1122 # Internet -> FidoNet (outgoing) character mapping table (a la mapchan)
1123 # outtab  $BINDIR/outkoi8alt
1124
1125 # FidoNet -> Internet (incoming) character mapping table
1126 # intab  $BINDIR/outaltkoi8
1127
1128 # Toss program, used by ifunpack
1129 iftoss  $BINDIR/iftoss
1130
1131 EOF
1132
1133   cat copi.ifmcfg2 >>$FNETCFG
1134
1135   if [ $[$[SPD] > $[19200]] = 1 ]; then
1136     SPDLOCK="L38400"
1137   elif [ $[$[SPD] > $[9600]] = 1 ]; then
1138     SPDLOCK="L19200"
1139   elif [ $[$[SPD] > $[2400]] = 1 ]; then
1140     SPDLOCK="9600"
1141   elif [ $[$[SPD] > $[1200]] = 1 ]; then
1142     SPDLOCK="2400"
1143   elif [ $[$[SPD] > $[300]] = 1 ]; then
1144     SPDLOCK="1200"
1145   else
1146     SPDLOCK="300"
1147   fi
1148
1149   echo "ModemPort modem:$SPDLOCK" >>$FNETCFG
1150   cat copi.ifmcfg5 >>$FNETCFG
1151
1152   echo "PhoneTrans $COUNTRYPREF-$PREF-  /" >>$FNETCFG
1153   echo "PhoneTrans $COUNTRYPREF-                / $LONG_DIST_PREFIX" >>$FNETCFG
1154   echo "PhoneTrans              / $INTERCOUNTRYPREF" >>$FNETCFG
1155   echo "ModemReset ATZ\r" >>$FNETCFG
1156   echo "ModemDial \d$DIALSTRING\T\r" >>$FNETCFG
1157
1158   cat copi.ifmcfg4 >>$FNETCFG
1159
1160   echo "Name            $SYSNAME" >>$FNETCFG
1161   echo "Location        $LOCATION" >>$FNETCFG
1162   echo "SysOp           $SYSOP" >>$FNETCFG
1163   echo "Phone           $COUNTRYPREF-$PREF-$PHONE" >>$FNETCFG
1164   echo "Speed           $SPD" >>$FNETCFG
1165   echo "Flags           $NODEFLAGS" >>$FNETCFG
1166
1167   chown fnet.uucp $FNETCFG
1168 }
1169
1170 # Args: cfg_dir
1171 configure_smail() {
1172   dialog --backtitle "$TITLE" --infobox "Configuro Smail..." 0 0
1173
1174   USER="`cat $COPIUSER`"
1175   FNETHOME=~fnet
1176
1177   SMAIL=$1
1178   SMAILCONF=$SMAIL/config
1179   ALIASES=$SMAIL/aliases
1180   DIRECTORS=$SMAIL/directors
1181   ROUTERS=$SMAIL/routers
1182   TRANSPORTS=$SMAIL/transports
1183   FTNPATHS=$SMAIL/ftnpaths
1184
1185 # File: config
1186   save $SMAILCONF
1187
1188   cat <<EOF >$SMAILCONF
1189 #
1190 #       smail configuration for $HOST.$DOMAIN
1191 # (see smail(5) man page for details and other options)
1192 #
1193 hostnames=$HOST:$HOST.$DOMAIN
1194 domains=$DOMAIN
1195 postmaster=$USER
1196 smtp_banner="\$primary_name Linux Smail\$version #\$compile_num ready at \$date"
1197 spool_mode=0600
1198 received_field="Received: \\
1199         \${if def:sender_host \\
1200                 {from \$sender_host by \$primary_name \\
1201                 \${if def:sender_proto: with \$sender_proto}\\
1202                 \n\t(Linux Smail\$version #\$compile_num) }\\
1203         else{by \$primary_name \${if def:sender_proto:with \$sender_proto }\\
1204                 (Linux Smail\$version #\$compile_num)\n\t}}\\
1205         id \$message_id; \$spool_date"
1206 trusted_users=root:uucp:daemon:fnet
1207 EOF
1208
1209
1210 # File: routers
1211   save $ROUTERS
1212
1213   cat <<EOF >$ROUTERS
1214 ifmail: driver=pathalias,
1215         transport=ifmail;
1216
1217         file=ftnpaths,
1218         proto=lsearch,
1219         domain=ftn:org
1220 EOF
1221
1222
1223 # File: transports
1224   save $TRANSPORTS
1225
1226   cat <<EOF >$TRANSPORTS
1227 local:  driver = appendfile,
1228         return_path,
1229         local,
1230         from,
1231         unix_from_hack;
1232
1233         file = /var/spool/mail/\${lc:user},
1234         group = mail,
1235         mode = 0660,
1236         suffix = "\n",
1237         append_as_user
1238
1239 ifmail: driver=pipe,
1240         from,
1241         -received,
1242         max_addrs=5,
1243         max_chars=200;
1244
1245         pipe_as_sender,
1246         cmd="$FNETHOME/ifmail -r\$host \$((\${strip:user})\$)"
1247
1248 EOF
1249
1250
1251 # File: directors
1252   save $DIRECTORS
1253
1254
1255 # File: aliases
1256   for i in $ALIASES /etc/aliases /usr/lib/aliases
1257   do
1258     if [ ! -L $i -a -f $i ]
1259     then
1260       mv $i $i~
1261     fi
1262   done
1263
1264   USERNAME="`cut /etc/passwd -f1,5 -d: | grep $USER: | cut -f2 -d: | sed y/\" \"/./`"
1265   echo "news: $USER" >> $ALIASES
1266   echo "usenet: $USER" >> $ALIASES
1267   echo "$USERNAME: $USER" >> $ALIASES
1268
1269   ln -sf $ALIASES /etc/
1270   ln -sf $ALIASES /usr/lib/
1271
1272   cd $SMAIL     # is this necessary?? E-mail me if you know,please
1273   mkaliases >/dev/null
1274
1275 # File: ftnpaths
1276   save $FTNPATHS
1277
1278   OK=1
1279   IAKA=1
1280   while [ $OK != 0 ]; do
1281     AKA="`cut $AKASETUP -f$IAKA -d:`"
1282     IAKA=$[$IAKA+1]
1283     if [ ! "$AKA" ]; then
1284       OK=0
1285     else
1286       echo -e ".`echo $AKA | cut -f4 -d.`\t\t$AKA!%s" >>$FTNPATHS
1287     fi
1288   done
1289
1290
1291 # misc section
1292
1293   chmod 1775 /var/spool/mail
1294   chgrp mail /var/spool/mail
1295
1296   cd $SMAIL
1297   touch forward
1298   /usr/lib/smail/mkdbm forward
1299
1300 # reload sendmail
1301   killall sendmail 2>/dev/null
1302   /usr/sbin/sendmail -bd -q15m  # if inetd handles smtp port, this will not load
1303 }