home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / unix / volume16 / ida2 / part02 < prev    next >
Encoding:
Internet Message Format  |  1988-11-13  |  54.1 KB

  1. Subject:  v16i074:  IDA Sendmail kit, Part02/08
  2. Newsgroups: comp.sources.unix
  3. Sender: sources
  4. Approved: rsalz@uunet.UU.NET
  5.  
  6. Submitted-by: Lennart Lovstrand <lovstran@arisia.xerox.com>
  7. Posting-number: Volume 16, Issue 74
  8. Archive-name: ida2/part02
  9.  
  10. #! /bin/sh
  11. # This is a shell archive.  Remove anything before this line, then unpack
  12. # it by saving it into a file and typing "sh file".  To overwrite existing
  13. # files, type "sh file -c".  You can also feed this as standard input via
  14. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  15. # will see the following message at the end:
  16. #        "End of archive 2 (of 8)."
  17. # Contents:  ida/INSTALL ida/doc/announcement-1.0
  18. #   ida/doc/announcement-1.2 ida/doc/dbm.1 ida/lib/Makefile.ida
  19. #   ida/lib/domaintable ida/lib/pathtable ida/patches/MDBM.diffs
  20. #   ida/patches/macro.c.diff ida/patches/readcf.c.diff
  21. #   ida/patches/savemail.c.diff ida/patches/srvrsmtp.c.diff
  22. #   ida/patches/usersmtp.c.diff ida/patches/util.c.diff
  23. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  24. if test -f ida/INSTALL -a "${1}" != "-c" ; then 
  25.   echo shar: Will not over-write existing file \"ida/INSTALL\"
  26. else
  27. echo shar: Extracting \"ida/INSTALL\" \(3437 characters\)
  28. sed "s/^X//" >ida/INSTALL <<'END_OF_ida/INSTALL'
  29. X#
  30. X#  INSTALL -- The IDA Sendmail Enhancement Kit.
  31. X#  Copyright (c) 1987, 1988 Lennart Lovstrand
  32. X#  CIS Dept, Univ of Linkoping, Sweden
  33. X#
  34. X#  Use it, abuse it, but don't sell it.
  35. X#
  36. X
  37. XINSTALLATION INSTRUCTIONS
  38. X
  39. XThese instructions will tell you step-by-step how to install and bring
  40. Xthe Kit's sendmail system up.  The source code modifications are given
  41. Xas context diffs, based on the BSD 4.3 release of sendmail version 5.59,
  42. Xready to be installed using Larry Wall's eminent patch program.  You
  43. Xwill also need the latest version of BIND (4.8) to compile and link
  44. Xsendmail with MX support.  The option of using Maryland's mdbm library
  45. Xis still open, although it has not been tested with this version of
  46. Xsendmail.  Finally, in order to automatically produce routing tables,
  47. Xyou will need Peter Honeyman's pathalias program.  Both of the latter
  48. Xare available from your nearest USENET comp.sources.unix archive.
  49. X
  50. X [1] Unpack the Kit in the sendmail directory (preferably).  This should
  51. X     give you a new ida subdirectory with all the Kit's files.  (Hmm,
  52. X     perhaps you've already done this since you are reading this file.)
  53. X
  54. X [2] Goto sendmail/ida and check that you agree with the Makefile's
  55. X     definitions.  If you change anything, do a "make configure" to
  56. X     propagate those changes to the subdirectories' Makefiles.
  57. X
  58. X [3] Goto sendmail/ida/doc.  Do "make doc" to print out the accompanying
  59. X     paper and "make man" to print the manual pages.  Do "make install"
  60. X     to install the latter in your man directory.
  61. X
  62. X [4] Goto sendmail/ida/patches and do "make backup".  This will create a
  63. X     backup copy of sendmail/src/*.[hc] and sendmail/doc/op.me in
  64. X     Backup.tar.  You can restore them if necessary by performing "make
  65. X     restore", still in the patches directory.
  66. X
  67. X [5] Do "make patch" to install the IDA enhancements.  You will need
  68. X     patch(1), for this or else edit the files by hand.  Look out for
  69. X     rejected patches; that will indicate that you aren't patching the
  70. X     generic sendmail 5.59.
  71. X
  72. X [6] Goto sendmail/src and recompile sendmail.  You'll need to do a
  73. X     "make depend" before you can do "make".  See that it still works.
  74. X     Your old configuration file should still work unless you depend on
  75. X     some obscure side effects.
  76. X
  77. X [7] Goto sendmail/ida/aux and do "make" to compile the auxiliary
  78. X     programs.  Try them out, guided with the newly printed manual
  79. X     pages.
  80. X
  81. X [8] Do "make install" to install the programs in BINDIR (/usr/local/bin
  82. X     by default; but another choice would be /usr/lib/mail if you only
  83. X     intend to use them with this kit).  It's also about time to
  84. X     (manually) create a symbolic link from /usr/ucb/bsmtp to
  85. X     /usr/lib/sendmail if you intend to receive batched SMTP mail.
  86. X
  87. X [9] Goto sendmail/ida/cf and inspect the supplied m4(1) configuration
  88. X     definitions.  Send Sendmail.mc to your line printer and study it.
  89. X     Do "make" to see how the sample configurations look expanded.
  90. X
  91. X[10] Goto sendmail/ida/lib and inspect the supplied sample data files.
  92. X     Try applying the xalparse program on the xaliases file if you feel
  93. X     like it.
  94. X
  95. X[11] Determine your site's routing capabilities and create your corre-
  96. X     sponding data files in LIBDIR.  Go back to sendmail/ida/cf and
  97. X     create your own m4(1) configuration file using the samples as
  98. X     templates.  Produce an actual, personal sendmail.cf file.
  99. X
  100. X[12] Try out your new sendmail system.
  101. X     Good Luck!
  102. END_OF_ida/INSTALL
  103. if test 3437 -ne `wc -c <ida/INSTALL`; then
  104.     echo shar: \"ida/INSTALL\" unpacked with wrong size!
  105. fi
  106. # end of overwriting check
  107. fi
  108. if test -f ida/doc/announcement-1.0 -a "${1}" != "-c" ; then 
  109.   echo shar: Will not over-write existing file \"ida/doc/announcement-1.0\"
  110. else
  111. echo shar: Extracting \"ida/doc/announcement-1.0\" \(2761 characters\)
  112. sed "s/^X//" >ida/doc/announcement-1.0 <<'END_OF_ida/doc/announcement-1.0'
  113. XPath: liuida!lel
  114. XFrom: lel@ida.liu.se (Lennart Lovstrand)
  115. XNewsgroups: comp.mail.uucp,comp.mail.misc
  116. XSubject: The IDA Sendmail Enhancement Kit
  117. XMessage-ID: <579@prefix.liu.se>
  118. XDate: 10 Jun 87 16:55:29 GMT
  119. XSender: lenlo@prefix.liu.se
  120. XLines: 54
  121. XXref: liuida comp.mail.uucp:464 comp.mail.misc:268
  122. X
  123. XThe IDA Sendmail Enhancement Kit was finally sent off to Rich Salz of
  124. Xcomp.sources.unix today.  He still has problems receiving sources for
  125. Xthe newsgroup after his relocation, but I'm afraid I couldn't wait any
  126. Xlonger.  At the end of this week, I'm off for a new job in another
  127. Xcountry.  I hope it won't take too long for the Kit to appear in the
  128. Xnewsgroup.  For those of you who have ARPANET access and don't want to
  129. Xwait, thanks to Dorab Patel of UCLA there is a copy on the host
  130. Xulysses.cs.ucla.edu [128.97.2.19] in the file ~ftp/pub/ida.tar.Z
  131. Xavailable for anonymous FTP.  If anyone is really desperate, I can
  132. Xprobably send copy by mail too (330 Kbyte in 7 shars).  But you will
  133. Xhave to react quickly then...
  134. X
  135. XThe Kit includes a set of source code modifications to the BSD 4.3
  136. Xsendmail program (version 5.11).  The changes will enable sendmail to
  137. Xhave direct access to dbm(3) files, separate envelope/header rewriting
  138. Xrulesets, and multi-token class matches among other things.
  139. X
  140. XAs a separate part of the Kit is the IDA Sendmail Master Configuration
  141. Xfile and a sample setup used at the CIS Dept, U of Linkoping.  The
  142. Xconfiguration file together with the supplied data files and utility
  143. Xprograms, implement such nice features as pathalias based systems
  144. Xrouting within sendmail, fully !-/@-translating rulesets, and generic
  145. Xlocal user addresses.
  146. X
  147. XThe new sendmail functions are breifly listed below and further
  148. Xdescribed in the accompanying paper, which in addition discusses
  149. Xelectronic mail addressing in general and hybrid addresses in
  150. Xparticular.
  151. X
  152. X   Nameserver Default Argument
  153. X   Direct Access to Dbm(3) Files
  154. X   Batched SMTP Support
  155. X   Separate Envelope/Header Rewriting Rulesets
  156. X   Separate Local UUCP Host Name
  157. X   Return Path for UUCP Mailers
  158. X   UUCP Header Address Relativization
  159. X   Support for Multi-Token Matches
  160. X   Support for Embedded Subruleset Calls
  161. X   Elaborate Matching Algorithm for Unknown Local Recipients
  162. X   Support for Maryland's Mdbm Package
  163. X   Improved Test Mode Output
  164. X   Better To: and Cc: Headers of Returned Messages
  165. X   Queue Bug Fixed
  166. X   Shared Input SMTP Bug Tentatively Fixed
  167. X   Optional BSD 2.9 and 4.2 Compatibility Code
  168. X & Miscellaneous Changes
  169. X
  170. XEnjoy!
  171. X--Lennart
  172. X(soon at Xerox EuroPARC, Cambridge, U.K.)
  173. X--
  174. XDept of Computer and Information Science, University of Linkoping, Sweden
  175. XInternet: Lennart.Lovstrand@IDA.LiU.SE       EAN/X.400: lel@ida.liu.sunet
  176. XUUCP: {mcvax,munnari,seismo}!enea!liuida!lel    EARN/BITNET: LEL@SELIUI51
  177. X
  178. X
  179. END_OF_ida/doc/announcement-1.0
  180. if test 2761 -ne `wc -c <ida/doc/announcement-1.0`; then
  181.     echo shar: \"ida/doc/announcement-1.0\" unpacked with wrong size!
  182. fi
  183. # end of overwriting check
  184. fi
  185. if test -f ida/doc/announcement-1.2 -a "${1}" != "-c" ; then 
  186.   echo shar: Will not over-write existing file \"ida/doc/announcement-1.2\"
  187. else
  188. echo shar: Extracting \"ida/doc/announcement-1.2\" \(2830 characters\)
  189. sed "s/^X//" >ida/doc/announcement-1.2 <<'END_OF_ida/doc/announcement-1.2'
  190. XPath: liuida!lel
  191. XFrom: Lennart_Lovstrand.EuroPARC@Xerox.COM
  192. XNewsgroups: comp.mail.sendmail
  193. XSubject: Re: sendmail with MX and IDA-enhancements
  194. XMessage-Id: <884@majestix.liu.se>
  195. XDate: 26 Aug 88 20:53:47 GMT
  196. XReferences: <298@pvab.UUCP> <450@comdesign.CDI.COM>
  197. XOrganization: Rank Xerox EuroPARC, Cambridge, England
  198. XSender: lenlo@majestix.liu.se
  199. XLines: 59
  200. X
  201. XIn article <450@comdesign.CDI.COM> pst@comdesign.CDI.COM (Paul Traina) writes:
  202. X> From article <298@pvab.UUCP>, by robert@pvab.UUCP (Robert Claeson):
  203. X> | In article <553@laura.UUCP>, ap@laura.UUCP (Axel Pawlik) writes:
  204. X> |>   has anybody out there already merged the MX-sendmail
  205. X> |> with Lennard Loevstrand's IDA-enhancements?
  206. X> | And added Sun's enhancements (being able to query YP for known hosts
  207. X> | and the like)?
  208. X> Ditto please, I'm torn between runing old 4.12 and hacking 5.59 to have
  209. X> the YP support.
  210. X
  211. XGentlemen and -women, it does indeed exist!
  212. X
  213. XPlease welcome the IDA Sendmail Enhancement Kit v1.2 for sendmail 5.59
  214. Xwith MX and Yellow Pages support.  It has tonight been made available on
  215. XArisia.Xerox.COM in ~ftp/pub1/ida.tar.Z (available via anonymous ftp)
  216. Xand will be sent to comp.sources.unix shortly.
  217. X
  218. XThe major change is that of Yellow Pages support, but others include dbm
  219. Xfile update locking, setting classes from programs (eg. FU|uuname),
  220. Xdelayed macro evaluation (from the net), rfc822 quoted macro expansion,
  221. Xaddress rewriting loop detection and an extra compile-time frozen file
  222. Xcheck; the latter ones contributed by Guy Middleton @ Waterloo.
  223. X
  224. XThere has also been some bug fixes and slight improvements on the IDA
  225. Xconfiguration file and associated files.
  226. X
  227. XAll the old enhancements still apply, with the exception of BSD2.9 and
  228. X4.2 support, although it will compile and run under SunOS 3.x given that
  229. Xyou have bind 4.8 as well.
  230. X
  231. XFor those of you who haven't heard of this before, the IDA Enhancement
  232. XKit is a set of changes to the standard Berkeley mailer which implements
  233. Xthe following features:
  234. X
  235. X  o  Nameserver Default Argument
  236. X  o  Direct Access to Dbm(3) Files
  237. X  o  Batched SMTP Support
  238. X  o  Separate Envelope/Header Rewriting Rulesets
  239. X  o  Separate Local UUCP Host Name
  240. X  o  Return Path for UUCP Mailers
  241. X  o  UUCP Header Address Relativization
  242. X  o  Support for Multi-Token Matches
  243. X  o  Support for Embedded Subruleset Calls
  244. X  o  Elaborate Matching Algorithm for Unknown Local Recipients
  245. X  o  Support for Maryland's Mdbm Package
  246. X  o  Improved Test Mode Output
  247. X  o  Better To: and Cc: Headers of Returned Messages
  248. X
  249. XIt also comes with the IDA Configuration Kit, which has pathalias based
  250. Xsystems routing within sendmail, fully !-/@-translating rulesets,
  251. Xgeneric localuser addresses, and more.
  252. X
  253. XEnjoy!
  254. X
  255. X--Lennart Lovstrand
  256. X  Rank Xerox EuroPARC, Cambridge, England
  257. X
  258. X  DARPA Internet: Lovstrand.EuroPARC@Xerox.COM
  259. X  Xerox Internet: Lovstrand:EuroPARC:RX
  260. END_OF_ida/doc/announcement-1.2
  261. if test 2830 -ne `wc -c <ida/doc/announcement-1.2`; then
  262.     echo shar: \"ida/doc/announcement-1.2\" unpacked with wrong size!
  263. fi
  264. # end of overwriting check
  265. fi
  266. if test -f ida/doc/dbm.1 -a "${1}" != "-c" ; then 
  267.   echo shar: Will not over-write existing file \"ida/doc/dbm.1\"
  268. else
  269. echo shar: Extracting \"ida/doc/dbm.1\" \(4959 characters\)
  270. sed "s/^X//" >ida/doc/dbm.1 <<'END_OF_ida/doc/dbm.1'
  271. X.TH DBM 1 "24 April 1987"                \" -*- nroff -*-
  272. X.SH NAME
  273. Xdbm \- general
  274. X.IR dbm (3)
  275. Xdatabase management tool
  276. X.SH SYNOPSIS
  277. X.BR dbm
  278. X.RB [\| \-AILNRSU \|]
  279. X.RB [\| \-d
  280. X.IR dbm_file \|]
  281. X.RB [\| \-m
  282. X.IR mode \|]
  283. X.RB [\| \-o 
  284. X.IR output_file \|]
  285. X.I command
  286. X.RI [\| args\|.\|.\|. \|]
  287. X.SH DESCRIPTION
  288. X.I Dbm
  289. Xis used to manage
  290. X.IR dbm (3)
  291. Xtype databases.  Its function is controlled by the dbm
  292. X.I command
  293. Xgiven on the command line, possibly with additional arguments.  Its
  294. Xtypical usage is to load a
  295. X.I dbm
  296. Xdatabase from a input file or to dump it to a readable format.  It may
  297. Xalso be used to probe for selected keys or add specific key/value pairs. 
  298. XIn addition,
  299. X.I dbm
  300. Xprovides parsing routines for an extended textual format, suitable for
  301. Xbuilding tables or various kinds.  The format is further described in
  302. Xthe section about the
  303. X.B parse
  304. Xcommand below. 
  305. X.SH OPTIONS
  306. X.TP
  307. X.B \-A
  308. XAppend mode, don't automatically clear the database on the
  309. X.BR load
  310. Xand
  311. X.B make
  312. Xoperations. 
  313. X.TP
  314. X.B \-I
  315. XInsert mode; will supply the \s-1DBM_INSERT\s+1 flag to all
  316. X.I dbm_store
  317. Xoperations.  This means that if two entries with equal keys are given,
  318. Xonly the first will actually be entered to the database (default) and no
  319. Xwarning will be given. 
  320. X.TP
  321. X.B \-L
  322. XLowercase mode.  Change all keys to lowercase before reading from or writing
  323. Xto the database.
  324. X.TP
  325. X.B \-R
  326. XReplace mode; will supply the \s-1DBM_REPLACE\s+1 flag to all
  327. X.I dbm_store
  328. Xoperations.  This means that if two entries with equal keys are given,
  329. Xonly the last will actually be entered to the database and no warning
  330. Xmessages are given. 
  331. X.TP
  332. X.B \-S
  333. XAdd a
  334. X.B @@@
  335. Xsenteniel after the last entry has been written to the database. 
  336. X.TP
  337. X.B \-U
  338. XUppercase mode.  Turn all keys to uppercase before reading from or
  339. Xwriting to the database.
  340. X.TP
  341. X.BI \-d " dbm_file"
  342. XPerform all operations on the named database file.  If no
  343. X.B \-d
  344. Xoption is given, the last argument after the
  345. X.I command
  346. Xwill be used as the
  347. X.IR dbm_file. 
  348. X.TP
  349. X.BI \-m " mode"
  350. XUse the given
  351. X.I mode
  352. Xwhen creating new databases. 
  353. X.TP
  354. X.BI \-o " output_file"
  355. XSend all output from the
  356. X.B dump
  357. Xand
  358. X.B parse
  359. Xoperations to the named output file instead of stdout. 
  360. X.SH COMMANDS
  361. X.PP
  362. X.TP
  363. X.B clear
  364. XCreats an empty
  365. X.I dbm
  366. Xdatabase, either by clearing an old one or by creating a new.
  367. X.TP
  368. X.BR delete " key \fR[\|.\|.\|.\|]\fP"
  369. XRemoves entries with the specified keys from the database.
  370. X.TP
  371. X.B dump
  372. XDumps the
  373. X.I dbm
  374. Xdatabase to stdout (or to
  375. X.IR output_file ,
  376. Xif the 
  377. X.B \-o
  378. Xoption is used).  The output will consist of one entry per line with a
  379. Xtab between each key and value. 
  380. X.TP
  381. X.BI fetch " key \fR[\|.\|.\|.\|]\fP"
  382. X.B Fetch
  383. Xwill search for the
  384. X.I key
  385. Xin the database and print both key and value in
  386. X.B dump
  387. Xformat if found on the standard output.  Non-existing
  388. X.IR keys
  389. Xwill be signalled by a [\s-1NOT_FOUND\s+1] message. 
  390. X.TP
  391. X.BR load " [\|\fIfile\fP\|.\|.\|.\|]"
  392. XLoad the database with entries from the specified
  393. X.IR files .
  394. XIf no
  395. X.I files
  396. Xare given or if a file is specified as `-', the database will be loaded
  397. Xfrom standard input.  Each line of the file should have a key and value
  398. Xseparated by a tab.  (Incidentally, this is the same format as
  399. X.B dump
  400. Xand
  401. X.IR pathalias (1)
  402. Xwill produce.)  The database is first cleared unless the append
  403. X(\fB\-A\fP) switch has been given. 
  404. X.TP
  405. X.BR make " [\|\fIfile\fP\|.\|.\|.\|]"
  406. X.B Make
  407. Xcombines the operations of
  408. X.B parse
  409. Xand
  410. X.BR load
  411. X(q.v.), by storing each record after it has been parsed. 
  412. X.TP
  413. X.BR parse " [\|\fIfile\fP\|.\|.\|.\|]"
  414. XThis command will parse the contents of the specified
  415. X.IR files
  416. X(or stdin if no
  417. X.I files
  418. Xare given or when a file is `-'), according to the following syntax:
  419. X.in +\n()Iu
  420. Xvalue key key .\|.\|. 
  421. X.in -\n()Iu
  422. XWhitespace delimit tokens and sharp signs (\fB#\fP) anywhere on a line
  423. Xbegins comments unless any of them are quoted by a backslash (\fB\\\fP)
  424. Xor put inside double quotes (\fB"\fP\|.\|.\|.\|\fB"\fP) or angle
  425. Xbrackets (\fB<\fP\|.\|.\|.\|\fB>\fP).  Lines beginning with whitespace
  426. Xare considered to be continuations of the previous line.
  427. X.TP
  428. X.BI store " key value \fR[\|\fI key value \fR\|.\|.\|.\|]\fI"
  429. XStore one or more key/value pairs explicitly mentioned on the command
  430. Xline.
  431. X.SH EXAMPLES
  432. X.nf
  433. X.ta \w'dbm parse xfile | dbm -AI load foo'u+6n
  434. Xdbm -d foo clear    \fIcreate the database foo\fP
  435. Xcat infile | dbm load foo    \fIload it from the infile\fP
  436. Xdbm parse xfile | dbm -AI load foo    \fIadd keys from the xfile...\fP
  437. X.I "(or, shorter)    \fI...not already present...\fP"
  438. Xdbm -I make xfile foo    \fI...in the database\fP
  439. Xdbm fetch keya keyb foo    \fIfetch values for the keys\fP
  440. Xdbm -R store keyc valuec foo    \fIoverwrite previous value for keyc\fP
  441. X.fi
  442. X.SH AUTHOR
  443. X.nf
  444. XLennart Lovstrand <lel@ida.liu.se>
  445. XCIS Dept, Univ of Linkoping, Sweden
  446. X.fi
  447. X.SH "SEE ALSO"
  448. X.IR pathalias (1),
  449. X.IR dbm (3),
  450. X.IR ndbm (3)
  451. X.SH BUGS
  452. XShould probably remove the senteniel when opening the database for write
  453. Xaccess (provided that the
  454. X.B \-S
  455. Xflag has been given).
  456. X.br
  457. XRequires
  458. X.IR ndbm (3)
  459. Xor
  460. X.IR mdbm (3)
  461. Xsupport for no real reason. 
  462. END_OF_ida/doc/dbm.1
  463. if test 4959 -ne `wc -c <ida/doc/dbm.1`; then
  464.     echo shar: \"ida/doc/dbm.1\" unpacked with wrong size!
  465. fi
  466. # end of overwriting check
  467. fi
  468. if test -f ida/lib/Makefile.ida -a "${1}" != "-c" ; then 
  469.   echo shar: Will not over-write existing file \"ida/lib/Makefile.ida\"
  470. else
  471. echo shar: Extracting \"ida/lib/Makefile.ida\" \(2514 characters\)
  472. sed "s/^X//" >ida/lib/Makefile.ida <<'END_OF_ida/lib/Makefile.ida'
  473. X#
  474. X#  MAKEFILE -- Library Files.
  475. X#  Copyright (c) 1987, 1988 Lennart Lovstrand
  476. X#  CIS Dept, Univ of Linkoping, Sweden
  477. X#
  478. X#  Use it, abuse it, but don't sell it.
  479. X#
  480. X#  Special IDA version with DECnet.
  481. X
  482. X
  483. XLOCALDOMAINS=    liu.se ida.liu.se sunet.se UUCP    # only if domaintable is used
  484. XPATHFLAGS=    -C25 -i -lIDA-TCP-NET
  485. XSENDMAIL=    /usr/lib/sendmail
  486. XSKILL=        /usr/local/bin/skill        # not required
  487. XTABLES=        $(YP)domaintable$(DBMDIREXT) $(YP)generics$(DBMDIREXT) \
  488. X        $(YP)pathtable$(DBMDIREXT) $(YP)aliases$(DBMDIREXT) \
  489. X        mailertable$(DBMDIREXT) uucp/xtable$(DBMDIREXT) \
  490. X        decnet/nodes decnet/xtable$(DBMDIREXT) uucp/xtable$(DBMDIREXT)
  491. XUUCPNODES=    /usr/lib/uucp/L.sys
  492. X# Prefix for YP dbm files; remove this if you won't be using YP databases
  493. XYP=        #/etc/yp/ida/mail.
  494. X
  495. X# Where to find a fresh list of DECnet nodes {in TOPS-20 NCP format}
  496. XNODE_DATA=    /usr/lisbet/ps/system/node-data.cmd
  497. X
  498. X
  499. X#  The following definitions are inserted by ../Makefile
  500. X#  Change them there--not here!
  501. XDBMDIREXT=    .dir
  502. XDBMPAGEXT=    .pag
  503. X
  504. X
  505. X#  Update all dbm tables
  506. Xall:    $(TABLES)
  507. X
  508. Xaliases generics:    xaliases
  509. X    xalparse xaliases aliases generics
  510. X
  511. X$(YP)aliases$(DBMDIREXT):    aliases newaliases.cf $(YP)domaintable$(DBMDIREXT)
  512. X    $(SENDMAIL) -Cnewaliases.cf -bi
  513. X    if [ -n "$(YP)" ]; then \
  514. X        mv aliases.dir $(YP)aliases.dir; \
  515. X        mv aliases.pag $(YP)aliases.pag; \
  516. X    fi
  517. X
  518. X$(YP)generics$(DBMDIREXT):    generics
  519. X    dbm -L make generics $(YP)generics
  520. X
  521. X# Note: Local fix here to make all DECnet nodes belong in .SUNET.SE
  522. X$(YP)domaintable$(DBMDIREXT):    domaintable decnet/nodes
  523. X    (dbm parse domaintable; \
  524. X     awk '{printf "%s.sunet.se\t%s.sunet.se\n", $$1, $$1}' decnet/nodes) |\
  525. X        mkdomext $(LOCALDOMAINS) | dbm -IL load $(YP)domaintable
  526. X
  527. X$(YP)pathtable$(DBMDIREXT):    pathtable
  528. X    pathalias $(PATHFLAGS) pathtable | dbm load $(YP)pathtable
  529. X
  530. Xmailertable$(DBMDIREXT):    mailertable
  531. X    dbm -L make mailertable mailertable
  532. X
  533. Xuucp/xtable$(DBMDIREXT):    uucp/xtable $(UUCPNODES)
  534. X    (dbm parse uucp/xtable; \
  535. X     awk '{printf "%s.UUCP\t%s\n", $$1, $$1}' $(UUCPNODES)) | \
  536. X     dbm -IL load uucp/xtable
  537. X
  538. X# Note: Local fix here for making all DECnet nodes belong in .SUNET.SE
  539. Xdecnet/xtable$(DBMDIREXT):    decnet/xtable decnet/nodes
  540. X    (dbm parse decnet/xtable; \
  541. X     awk '{printf "%s.sunet.se\t%s\n", $$1, $$1}' decnet/nodes) | \
  542. X        dbm -IL load decnet/xtable
  543. X
  544. Xdecnet/nodes:        $(NODE_DATA)
  545. X    cp decnet/nodes decnet/nodes.old
  546. X    scanf -i " set node %*s name %s" $(NODE_DATA) >$@
  547. X
  548. Xstop:
  549. X    -$(SKILL) sendmail
  550. X
  551. Xrestart:    stop
  552. X    $(SENDMAIL) -bd -q30m
  553. X
  554. Xclean:
  555. X    -rm -f \#* *~ *.dir *.pag *.map *.dat */*.dir */*.pag */*.map */*.dat
  556. END_OF_ida/lib/Makefile.ida
  557. if test 2514 -ne `wc -c <ida/lib/Makefile.ida`; then
  558.     echo shar: \"ida/lib/Makefile.ida\" unpacked with wrong size!
  559. fi
  560. # end of overwriting check
  561. fi
  562. if test -f ida/lib/domaintable -a "${1}" != "-c" ; then 
  563.   echo shar: Will not over-write existing file \"ida/lib/domaintable\"
  564. else
  565. echo shar: Extracting \"ida/lib/domaintable\" \(4149 characters\)
  566. sed "s/^X//" >ida/lib/domaintable <<'END_OF_ida/lib/domaintable'
  567. X#
  568. X#    Primitive name server table -- version 3.0 of 20-Apr-87
  569. X#
  570. X#    Format is <official-name> <nickname-1> .. <nickname-n>,
  571. X#    where the <nicnames> are optional.  Comments start with
  572. X#    a sharp sign (#).  A line beginning with whitespace is
  573. X#    assumed to be a continuation of the previous line.
  574. X#
  575. X#    The order in which the names are givin is significant;
  576. X#    early entries will hide later entries with coinciding
  577. X#    nicknames.
  578. X#
  579. X
  580. X#    Misc known nodes
  581. X#
  582. X        # Direct UUCP nodes
  583. Xenea.se        enea    enea.UUCP
  584. Xerilin.UUCP    erilin
  585. Xerix.ericsson.se erix    erix.UUCP
  586. Xliutde.UUCP    liutde
  587. Xrainier.UUCP    rainier
  588. X        # UUCP Major Relays & Backbones
  589. Xcbosgd.UUCP    cbosgd
  590. Xcernvax.UUCP    cernvax
  591. Xdecvax.UUCP    decvax
  592. Xdiku.UUCP    diku
  593. Xenea.se        enea    enea.UUCP
  594. Xi2unix.UUCP    i2unix
  595. Xinria.UUCP    inria
  596. Xmcvax.cwi.nl    mcvax    mcvax.UUCP
  597. Xpenet.UUCP    penet
  598. Xprlb2.UUCP    prlb2
  599. Xukc.UUCP    ukc
  600. Xunido.UUCP    unido
  601. Xvmars.UUCP    vmars
  602. X
  603. X#
  604. X#    These are just here to help people through the ARPAnet name change
  605. X#
  606. X
  607. Xseismo.CSS.GOV        SEISMO.ARPA
  608. XHARVARD.HARVARD.EDU    HARVARD.ARPA
  609. Xucbvax.BERKELEY.EDU    UCB-VAX.ARPA
  610. XWISCVM.WISC.EDU        WISCVM.ARPA
  611. XAI.AI.MIT.EDU        MIT-AI.ARPA
  612. XMC.LCS.MIT.EDU        MIT-MC.ARPA
  613. XKL.SRI.COM        SRI-KL.ARPA
  614. X# NIC.SRI.COM        SRI-NIC.ARPA        # Not yet
  615. XSAIL.STANFORD.EDU    SU-AI.ARPA
  616. XSCORE.STANFORD.EDU    SU-SCORE.ARPA
  617. XA.CS.CMU.EDU        CMU-CS-A.ARPA
  618. XC.CS.CMU.EDU        CMU-CS-C.ARPA
  619. XR20.UTEXAS.EDU        UTEXAS-20.ARPA
  620. XSALLY.UTEXAS.EDU    UT-SALLY.ARPA
  621. XRELAY.CS.NET        CSNET-RELAY.ARPA
  622. XSUMEX-AIM.STANFORD.EDU    SUMEX-AIM.ARPA
  623. XCSLI.STANFORD.EDU    CSLI.ARPA
  624. XXerox.COM        Xerox.ARPA
  625. X
  626. X#
  627. X#    Nodes within LiU.SE -- The University of Linkoping, Sweden
  628. X#
  629. X            # The IDA domain -- Dept of Comp and Info Science
  630. XIDA.LiU.SE        liuida.UUCP    liuida.liu.se    liuida.ida.liu.se
  631. X            # DECsystems
  632. XALADIN.LiU.SE        ALADIN.SUNET.SE
  633. XCLOVER.LiU.SE        CLOVER.SUNET.SE
  634. XDAISY.LiU.SE        DAISY.SUNET.SE
  635. XELINOR.LiU.SE        ELINOR.SUNET.SE
  636. XHAZEL.LiU.SE        HAZEL.SUNET.SE            HAZEL.IDA.LiU.SE
  637. XJINJIN.LiU.SE        JINJIN.SUNET.SE
  638. XLINA.LiU.SE        LINA.SUNET.SE
  639. XLINNEA.LiU.SE        LINNEA.SUNET.SE
  640. XLINUS.LiU.SE        LINUSE.SUNET.SE            LINUS.IDA.LiU.SE
  641. XLISBET.LiU.SE        LISBET.SUNET.SE            LISBET.IDA.LiU.SE
  642. XLUDVIG.LiU.SE        LUDVIG.SUNET.SE
  643. XMINMIN.LiU.SE        MINMIN.SUNET.SE
  644. XP13L00.LiU.SE        P13L00.SUNET.SE
  645. XTURTLE.LiU.SE        TURTLE.SUNET.SE
  646. XVIKTOR.LiU.SE        VIKTOR.SUNET.SE
  647. XWEIWEI.LiU.SE        WEIWEI.SUNET.SE
  648. X            # Unix systems
  649. Xasterix.liu.se        asterix.liu.uucp        asterix.ida.liu.se
  650. Xcrabbofix.liu.se                    crabbofix.ida.liu.se
  651. Xlillefix.liu.se                        lillefix.ida.liu.se
  652. Xmajestix.liu.se                        majestix.ida.liu.se
  653. Xmiraculix.liu.se                    miraculix.ida.liu.se
  654. Xobelix.liu.se        obelix.UUCP obelix.liu.uucp    obelix.ida.liu.se
  655. Xportofix.liu.se                        portofix.ida.liu.se
  656. Xprefix.liu.se                        prefix.ida.liu.se
  657. Xsenilix.liu.se                        senilix.ida.liu.se
  658. Xsmidefix.liu.se                        smidefix.ida.liu.se
  659. Xtragicomix.liu.se                    tragicomix.ida.liu.se
  660. X
  661. X#    Nodes within QZ.SE -- The Stockholm University Computing Center
  662. X#
  663. XFREJA.QZ.SE        FREJA.SUNET.SE
  664. X
  665. X#    Nodes within UU.SE -- University of Uppsala, Sweden
  666. X#
  667. XAIDA.UU.SE        AIDA.SUNET.SE            AIDA.UPPSALA.SE
  668. XBMC1.UU.SE        BMC1.SUNET.SE
  669. XCARMEN.UU.SE        CARMEN.SUNET.SE            CARMEN.UPPSALA.SE
  670. XCARTUS.UU.SE        CARTUS.SUNET.SE
  671. XCELL.UU.SE        CELL.SUNET.SE
  672. XESCIL.UU.SE        ESCIL.SUNET.SE
  673. Xemil.uu.se
  674. XEVA.UU.SE        EVA.SUNET.SE
  675. XFARFAR.UU.SE        FARFAR.SUNET.SE
  676. XGRAPH.UU.SE        GRAPH.SUNET.SE
  677. XGWAX1.UU.SE        GWAX1.SUNET.SE
  678. XGWAX2.UU.SE        GWAX2.SUNET.SE
  679. XIMMUNA.UU.SE        IMMUNA.SUNET.SE
  680. XIMUNIS.UU.SE        IMUNIS.SUNET.SE
  681. XKEMIST.UU.SE        KEMIST.SUNET.SE
  682. Xkuling.uu.se        kuling.UUCP            kuling.uppsala.se
  683. XKVAX1.UU.SE        KVAX1.SUNET.SE
  684. XKVAX2.UU.SE        KVAX2.SUNET.SE
  685. XLABAN.UU.SE        LABAN.SUNET.SE
  686. XLAPSE.UU.SE        LAPSE.SUNET.SE
  687. XMAJA.UU.SE        MAJA.SUNET.SE
  688. XMALIN.UU.SE        MALIN.SUNET.SE
  689. XMAX.UU.SE        MAX.SUNET.SE            MAX.UPPSALA.SE
  690. XMINC.UU.SE        MINC.SUNET.SE
  691. XNIMBUS.UU.SE        NIMBUS.SUNET.SE
  692. Xnumax.uu.se
  693. XPAX.UU.SE        PAX.SUNET.SE
  694. XPELLE.UU.SE        PELLE.SUNET.SE
  695. XPICTOR.UU.SE        PICTOR.SUNET.SE
  696. XRTR18A.UU.SE        RTR18A.SUNET.SE
  697. XSIGURD.UU.SE        SIGURD.SUNET.SE
  698. XSILVER.UU.SE        SILVER.SUNET.SE
  699. XTEKLA.UU.SE        TEKLA.SUNET.SE
  700. XTLU.UU.SE        TLU.SUNET.SE
  701. XXRAY.UU.SE        XRAY.SUNET.SE
  702. X
  703. X#    Nodes within LU.SE -- Universtiy of Lund, Sweden
  704. X#
  705. XAGATON.LU.SE        AGATON.SUNET.SE
  706. XPANDOR.LU.SE        PANDOR.SUNET.SE
  707. X
  708. X#    Nodes within SUNET.SE -- The Swedish University Network (DECnet)
  709. X#    are automatically inserted here.
  710. X
  711. XATHENA.SUNET.SE        # This one is not in the DECnet tables
  712. END_OF_ida/lib/domaintable
  713. if test 4149 -ne `wc -c <ida/lib/domaintable`; then
  714.     echo shar: \"ida/lib/domaintable\" unpacked with wrong size!
  715. fi
  716. # end of overwriting check
  717. fi
  718. if test -f ida/lib/pathtable -a "${1}" != "-c" ; then 
  719.   echo shar: Will not over-write existing file \"ida/lib/pathtable\"
  720. else
  721. echo shar: Extracting \"ida/lib/pathtable\" \(3889 characters\)
  722. sed "s/^X//" >ida/lib/pathtable <<'END_OF_ida/lib/pathtable'
  723. X#########################################################################
  724. X###  Pathalias Route Database    ##############################  v3.0  ###
  725. X#########################################################################
  726. X# Edited by Lennart.Lovstrand@IDA.LiU.SE Fri Apr 17 19:37:39 MET DST 1987
  727. X
  728. X###                #########################################
  729. X#    Special Links                            #
  730. X###                #########################################
  731. X
  732. Xasterix.liu.se        obelix.liu.se(DIRECT)        # UUCP/TTY
  733. Xmajestix.liu.se        alp.UUCP(DAILY),        # UUCP/modem-1200
  734. X            enea.se(DEMAND),        # UUCP/modem-2400
  735. X            erilin.UUCP(DIRECT),        # UUCP/modem-2400
  736. X            erix.UUCP(DEMAND),        # UUCP/modem-2400
  737. X            kuling.uu.se(HOURLY),        # UUCP/modem-2400?
  738. X            liutde.UUCP(DAILY),        # UUCP/modem-1200
  739. X            prosys.UUCP(HOURLY),        # UUCP/modem-2400
  740. X            rainier.UUCP(HOURLY),        # UUCP/modem-2400?
  741. X            ida.liu.se(0),            # via aliases dbm
  742. X            IDA-TCP-NET            # SMTP/TCP-IP
  743. Xrainier.UUCP        carola.UUCP, adams.UUCP        # SMTP/TCP-IP
  744. Xaida.uu.se        carmen.uu.se            # Cafard/TTY
  745. Xathena.sunet.se        aida.uu.se            # Cafard/UPNET
  746. X
  747. X
  748. X###                #########################################
  749. X#    Physical Networks                        #
  750. X###                #########################################
  751. X
  752. XIDA-TCP-NET = {
  753. X    asterix.liu.se,        # Gould
  754. X    crabbofix.liu.se,    # Sun-3/75M
  755. X    lillefix.liu.se,    # Sun-3/52
  756. X    lisbet.liu.se,        # DEC-2060
  757. X    majestix.liu.se,    # Sun-3/160 FS
  758. X    miraculix.liu.se,    # Sun-3/75C
  759. X    portofix.liu.se,    # Sun-3/75M
  760. X    prefix.liu.se,        # Sun-3/75M
  761. X    senilix.liu.se,        # Sun-3/75M
  762. X    smidefix.liu.se,    # Sun-3/75M
  763. X    tragicomix.liu.se}    # Sun-3/75M
  764. X
  765. X##  The SUNET-xx definitions includes only nodes that know about DECnet
  766. X##  area addressing.
  767. X
  768. XSUNET = {
  769. X    .sunet.se, SUNET-08, SUNET-13, SUNET-18, SUNET-46}
  770. X
  771. XSUNET-08 = {
  772. X    freja.qz.se, vera.sunet.se}
  773. X
  774. XSUNET-13 = {
  775. X    aladin.liu.se, clover.liu.se, daisy.liu.se, elinor.liu.se,
  776. X    hazel.liu.se, jinjin.liu.se, lina.liu.se, linus.liu.se,
  777. X    linnea.liu.se, lisbet.liu.se, liuida.sunet.se, ludvig.liu.se,
  778. X    minmin.liu.se, p13l00.liu.se, turtle.liu.se, viktor.liu.se,
  779. X    weiwei.liu.se}
  780. X
  781. XSUNET-18 = {
  782. X    malin.uu.se, tekla.uu.se, cartus.uu.se, pelle.uu.se, pictor.uu.se,
  783. X    tlu.uu.se, max.uu.se, kvax1.uu.se, kvax2.uu.se, sigurd.uu.se,
  784. X    escil.uu.se, gwax1.uu.se, gwax2.uu.se, kemist.uu.se, cell.uu.se,
  785. X    minc.uu.se, silver.uu.se, lapse.uu.se, maja.uu.se, rtr18a.uu.se,
  786. X    imunis.uu.se, xray.uu.se, graph.uu.se, immuna.uu.se, bmc1.uu.se,
  787. X    farfar.uu.se, eva.uu.se, nimbus.uu.se, laban.uu.se, pax.uu.se}
  788. X
  789. XSUNET-46 = {
  790. X    agaton.lu.se, pandor.lu.se}
  791. X
  792. X##  DECNET-xx defintions include both area-addressing nodes (which
  793. X##  may serve as gateways) and non-area-addressing nodes.
  794. X
  795. XDECNET-08 = {
  796. X    athena.sunet.se, freja.qz.se, vera.sunet.se}
  797. X
  798. X
  799. X###                #########################################
  800. X#    Domain Gateways                            #
  801. X###                #########################################
  802. X
  803. Xenea.se        .ARPA, .BITNET, .CSNET, .DEC, .JUNET, .MAILNET, .UUCP,
  804. X        .com, .edu, .gov, .mil, .net, .org,
  805. X        .au, .ca, .de, .fi, .fr, .gb, .il, .jp, .kr, .nl, .no, .nz,
  806. X        .se, .uk, .us,
  807. X        .cdn, .oz
  808. Xerix.UUCP    .ericsson, .ericsson.se
  809. Xlisbet.liu.se    .sunet.se
  810. Xliuida.sunet.se    .psi
  811. Xmajestix.liu.se    .liu, .liu.se, .ida, .ida.liu, .ida.liu.se,
  812. X        .qz, .qz.se, .uu, .uu.se, .uppsala, .uppsala.se
  813. Xnta-vax.ARPA    .Uninett
  814. X
  815. X
  816. X###                #########################################
  817. X#    Implicit links                            #
  818. X###                #########################################
  819. X
  820. Xenea.se            calgary.UUCP, relay.cs.net, nta-vax.ARPA,
  821. X            uoregon.UUCP, ohio-state.arpa
  822. Xlisbet.liu.se        freja.qz.se
  823. X
  824. X###                #########################################
  825. X#    Other explict links                        #
  826. X###                #########################################
  827. X
  828. Xkuling.uu.se        emil.uu.se
  829. Xrelay.cs.net        csri.toronto.edu, isc.intel.com
  830. Xuoregon.UUCP        drizzle.UUCP
  831. Xcalgary.UUCP        vuw90x.UUCP
  832. Xohio-state.arpa        OSU-20.OHIO-STATE.EDU
  833. X
  834. X###                #########################################
  835. X#    Useful synonyms                            #
  836. X###                #########################################
  837. X
  838. Xida.liu.se    = liuida.UUCP
  839. Xobelix.liu.se    = obelix.UUCP
  840. X.ericsson    = .erix
  841. X.ericsson.se    = .erix.se
  842. END_OF_ida/lib/pathtable
  843. if test 3889 -ne `wc -c <ida/lib/pathtable`; then
  844.     echo shar: \"ida/lib/pathtable\" unpacked with wrong size!
  845. fi
  846. # end of overwriting check
  847. fi
  848. if test -f ida/patches/MDBM.diffs -a "${1}" != "-c" ; then 
  849.   echo shar: Will not over-write existing file \"ida/patches/MDBM.diffs\"
  850. else
  851. echo shar: Extracting \"ida/patches/MDBM.diffs\" \(2627 characters\)
  852. sed "s/^X//" >ida/patches/MDBM.diffs <<'END_OF_ida/patches/MDBM.diffs'
  853. X*** alias.c.old    Fri Aug 26 18:30:22 1988
  854. X--- alias.c    Fri Aug 26 19:14:16 1988
  855. X***************
  856. X*** 578,583 ****
  857. X--- 578,586 ----
  858. X      (void) fclose(af);
  859. X      CurEnv->e_to = NULL;
  860. X      FileName = NULL;
  861. X+ #ifdef MDBM
  862. X+     (void) mdbm_sync(AliasDbm);
  863. X+ #endif MDBM
  864. X      message(Arpa_Info, "%d aliases, longest %d bytes, %d bytes total",
  865. X              naliases, longest, bytes);
  866. X  # ifdef LOG
  867. X*** conf.h.old    Fri Aug 26 18:30:27 1988
  868. X--- conf.h    Fri Aug 26 19:07:48 1988
  869. X***************
  870. X*** 48,53 ****
  871. X--- 48,54 ----
  872. X  
  873. X  # define DBM        1    /* use DBM library (requires -ldbm) */
  874. X  # define NDBM        1    /* new DBM library available (requires DBM) */
  875. X+ # define MDBM        1    /* subst Maryland's mdbm package for ndbm */
  876. X  # define YP        1    /* enable Yellow Pages code */
  877. X  # define DEBUG        1    /* enable debugging */
  878. X  # define LOG        1    /* enable logging */
  879. X*** sendmail.h.old    Fri Aug 26 18:30:56 1988
  880. X--- sendmail.h    Fri Aug 26 19:06:19 1988
  881. X***************
  882. X*** 493,499 ****
  883. X   */
  884. X  #define    MAX_ERRNO    100
  885. X   /*
  886. X! **  Database ([n]dbm) definitions.
  887. X  */
  888. X  
  889. X  #ifdef DBM
  890. X--- 493,499 ----
  891. X   */
  892. X  #define    MAX_ERRNO    100
  893. X   /*
  894. X! **  Database ([mn]dbm) definitions.
  895. X  */
  896. X  
  897. X  #ifdef DBM
  898. X***************
  899. X*** 503,517 ****
  900. X      int    dsize;
  901. X  } DATUM;
  902. X  
  903. X! # define DB_DIREXT    ".dir"
  904. X! # define DB_PAGEXT    ".pag"
  905. X  
  906. X! # ifdef NDBM
  907. X  
  908. X! #  undef DBM            /* while including ndbm.h */
  909. X! #  include <ndbm.h>        /* DBM is typedef'ed here */
  910. X  typedef DBM DBMFILE;        /* move typedef to DBMFILE */
  911. X! #  define DBM            /* and restore DBM definition */
  912. X  #  include <fcntl.h>        /* needed for dbm_open */
  913. X  
  914. X  #  define DATUM datum        /* use the definition in ndbm.h */
  915. X--- 503,526 ----
  916. X      int    dsize;
  917. X  } DATUM;
  918. X  
  919. X! # ifdef MDBM
  920. X! #  define DB_DIREXT    ".map"
  921. X! #  define DB_PAGEXT    ".dat"
  922. X! # else MDBM
  923. X! #  define DB_DIREXT    ".dir"
  924. X! #  define DB_PAGEXT    ".pag"
  925. X! # endif MDBM
  926. X  
  927. X! # if defined(NDBM) || defined(MDBM)
  928. X  
  929. X! #  ifdef MDBM
  930. X! #   include "mdbm_compat.h"    /* mdbm compatibility file */
  931. X! #  else MDBM
  932. X! #   undef DBM            /* while including ndbm.h */
  933. X! #   include <ndbm.h>        /* DBM is typedef'ed here */
  934. X  typedef DBM DBMFILE;        /* move typedef to DBMFILE */
  935. X! #   define DBM            /* and restore DBM definition */
  936. X! #  endif MDBM
  937. X  #  include <fcntl.h>        /* needed for dbm_open */
  938. X  
  939. X  #  define DATUM datum        /* use the definition in ndbm.h */
  940. X***************
  941. X*** 529,535 ****
  942. X  #  define AliasFile    DbmTab[DB_ALIAS].db_name
  943. X  #  define AliasDbm    DbmTab[DB_ALIAS].db_dbm
  944. X  
  945. X! # endif NDBM
  946. X  #endif DBM
  947. X   /*
  948. X  **  Global variables.
  949. X--- 538,544 ----
  950. X  #  define AliasFile    DbmTab[DB_ALIAS].db_name
  951. X  #  define AliasDbm    DbmTab[DB_ALIAS].db_dbm
  952. X  
  953. X! # endif NDBM || MDBM
  954. X  #endif DBM
  955. X   /*
  956. X  **  Global variables.
  957. END_OF_ida/patches/MDBM.diffs
  958. if test 2627 -ne `wc -c <ida/patches/MDBM.diffs`; then
  959.     echo shar: \"ida/patches/MDBM.diffs\" unpacked with wrong size!
  960. fi
  961. # end of overwriting check
  962. fi
  963. if test -f ida/patches/macro.c.diff -a "${1}" != "-c" ; then 
  964.   echo shar: Will not over-write existing file \"ida/patches/macro.c.diff\"
  965. else
  966. echo shar: Extracting \"ida/patches/macro.c.diff\" \(2896 characters\)
  967. sed "s/^X//" >ida/patches/macro.c.diff <<'END_OF_ida/patches/macro.c.diff'
  968. X*** macro.c.orig    Mon Mar 14 03:53:58 1988
  969. X--- macro.c    Fri Aug 26 03:59:36 1988
  970. X***************
  971. X*** 47,52 ****
  972. X--- 47,53 ----
  973. X      register char *q;
  974. X      bool skipping;        /* set if conditionally skipping output */
  975. X      bool recurse = FALSE;    /* set if recursion required */
  976. X+     bool quote, inquote, inescape;
  977. X      int i;
  978. X      char xbuf[BUFSIZ];
  979. X      extern char *macvalue();
  980. X***************
  981. X*** 73,78 ****
  982. X--- 74,80 ----
  983. X          */
  984. X  
  985. X          q = NULL;
  986. X+         quote = FALSE;
  987. X          c = *s;
  988. X          switch (c)
  989. X          {
  990. X***************
  991. X*** 89,99 ****
  992. X--- 91,106 ----
  993. X              skipping = FALSE;
  994. X              continue;
  995. X  
  996. X+           case QUOTE822:
  997. X+             quote = TRUE;
  998. X+             /*FALLTHROUGH*/
  999. X            case '\001':        /* macro interpolation */
  1000. X              c = *++s;
  1001. X              q = macvalue(c & 0177, e);
  1002. X              if (q == NULL)
  1003. X                  continue;
  1004. X+             if (quote && !mustquote(q))
  1005. X+                 quote = FALSE;
  1006. X              break;
  1007. X          }
  1008. X  
  1009. X***************
  1010. X*** 103,108 ****
  1011. X--- 110,117 ----
  1012. X  
  1013. X          if (skipping || xp >= &xbuf[sizeof xbuf])
  1014. X              continue;
  1015. X+         inquote = FALSE;
  1016. X+         inescape = FALSE;
  1017. X          if (q == NULL)
  1018. X              *xp++ = c;
  1019. X          else
  1020. X***************
  1021. X*** 112,119 ****
  1022. X--- 121,144 ----
  1023. X              {
  1024. X                  if (iscntrl(c) && !isspace(c))
  1025. X                      recurse = TRUE;
  1026. X+                 if (quote) {
  1027. X+                     if (!inquote) {
  1028. X+                         *xp++ = '"';
  1029. X+                         inquote = TRUE;
  1030. X+                     }
  1031. X+                     if (c == '"' && !inescape)
  1032. X+                         *xp++ = '\\';
  1033. X+                     if (c == '\\')
  1034. X+                         inescape = !inescape;
  1035. X+                     else
  1036. X+                         inescape = FALSE;
  1037. X+                 }
  1038. X                  *xp++ = c;
  1039. X              }
  1040. X+             if (inescape && xp < &xbuf[sizeof xbuf - 1])
  1041. X+                 *xp++ = '\\';
  1042. X+             if (quote && xp < &xbuf[sizeof xbuf - 1])
  1043. X+                 *xp++ = '"';
  1044. X          }
  1045. X      }
  1046. X      *xp = '\0';
  1047. X***************
  1048. X*** 174,179 ****
  1049. X--- 199,205 ----
  1050. X  **        $h   to host
  1051. X  **        $i   queue id
  1052. X  **        $j   official SMTP hostname, used in messages+
  1053. X+ **        $k   our UUCP host name, if different from $w
  1054. X  **        $l   UNIX-style from line+
  1055. X  **        $n   name of sendmail ("MAILER-DAEMON" on local
  1056. X  **             net typically)+
  1057. X***************
  1058. X*** 239,247 ****
  1059. X--- 265,307 ----
  1060. X      {
  1061. X          register char *p = e->e_macro[n];
  1062. X  
  1063. X+         if (p == MACNULL)
  1064. X+             /* shadowing null */
  1065. X+             return (NULL);
  1066. X          if (p != NULL)
  1067. X              return (p);
  1068. X          e = e->e_parent;
  1069. X      }
  1070. X      return (NULL);
  1071. X+ }
  1072. X+  /*
  1073. X+ **  MUSTQUOTE -- Check if string contains special RFC-822 chars.
  1074. X+ **
  1075. X+ **    Parameters:
  1076. X+ **        s -- the string to be checked.
  1077. X+ **
  1078. X+ **    Returns:
  1079. X+ **        TRUE if string is in need to be quoted, FALSE otherwise.
  1080. X+ **
  1081. X+ **    Side Effects:
  1082. X+ **        none.
  1083. X+ **
  1084. X+ **    Does this string contain any characters that RFC 822 says
  1085. X+ **    must be quoted?
  1086. X+ **    This is not strictly correct, since we consider ' ' non-special.
  1087. X+ **    Otherwise we'd quote "My Name", which is just too ugly.
  1088. X+ */
  1089. X+ mustquote(s)
  1090. X+     register char *s;
  1091. X+ {
  1092. X+     register int c;
  1093. X+     extern char *index();
  1094. X+ 
  1095. X+     while (c = *s++) {
  1096. X+         c &= 0177;
  1097. X+         if (c <= 037 || c == 0177 ||         /* CTLs */
  1098. X+             index(".()<>@,;:\\\"[]", c) != NULL)/* 822 specials */
  1099. X+             return TRUE;
  1100. X+     }
  1101. X+     return FALSE;
  1102. X  }
  1103. END_OF_ida/patches/macro.c.diff
  1104. if test 2896 -ne `wc -c <ida/patches/macro.c.diff`; then
  1105.     echo shar: \"ida/patches/macro.c.diff\" unpacked with wrong size!
  1106. fi
  1107. # end of overwriting check
  1108. fi
  1109. if test -f ida/patches/readcf.c.diff -a "${1}" != "-c" ; then 
  1110.   echo shar: Will not over-write existing file \"ida/patches/readcf.c.diff\"
  1111. else
  1112. echo shar: Extracting \"ida/patches/readcf.c.diff\" \(2959 characters\)
  1113. sed "s/^X//" >ida/patches/readcf.c.diff <<'END_OF_ida/patches/readcf.c.diff'
  1114. X*** readcf.c.orig    Sat Apr  2 01:51:11 1988
  1115. X--- readcf.c    Fri Sep 16 19:23:34 1988
  1116. X***************
  1117. X*** 309,315 ****
  1118. X      FILE *f;
  1119. X      char buf[MAXLINE];
  1120. X  
  1121. X!     f = fopen(filename, "r");
  1122. X      if (f == NULL)
  1123. X      {
  1124. X          syserr("cannot open %s", filename);
  1125. X--- 309,318 ----
  1126. X      FILE *f;
  1127. X      char buf[MAXLINE];
  1128. X  
  1129. X!     if (filename[0] == '|')
  1130. X!         f = popen(&filename[1], "r");
  1131. X!     else
  1132. X!         f = fopen(filename, "r");
  1133. X      if (f == NULL)
  1134. X      {
  1135. X          syserr("cannot open %s", filename);
  1136. X***************
  1137. X*** 357,363 ****
  1138. X          }
  1139. X      }
  1140. X  
  1141. X!     (void) fclose(f);
  1142. X  }
  1143. X   /*
  1144. X  **  MAKEMAILER -- define a new mailer.
  1145. X--- 360,369 ----
  1146. X          }
  1147. X      }
  1148. X  
  1149. X!     if (filename[0] == '|')
  1150. X!         (void) pclose(f);
  1151. X!     else
  1152. X!         (void) fclose(f);
  1153. X  }
  1154. X   /*
  1155. X  **  MAKEMAILER -- define a new mailer.
  1156. X***************
  1157. X*** 440,447 ****
  1158. X                  setbitn(*p, m->m_flags);
  1159. X              break;
  1160. X  
  1161. X!           case 'S':        /* sender rewriting ruleset */
  1162. X!           case 'R':        /* recipient rewriting ruleset */
  1163. X              i = atoi(p);
  1164. X              if (i < 0 || i >= MAXRWSETS)
  1165. X              {
  1166. X--- 446,453 ----
  1167. X                  setbitn(*p, m->m_flags);
  1168. X              break;
  1169. X  
  1170. X!           case 'S':        /* sender rewriting ruleset(s) */
  1171. X!           case 'R':        /* recipient rewriting ruleset(s) */
  1172. X              i = atoi(p);
  1173. X              if (i < 0 || i >= MAXRWSETS)
  1174. X              {
  1175. X***************
  1176. X*** 448,457 ****
  1177. X                  syserr("invalid rewrite set, %d max", MAXRWSETS);
  1178. X                  return;
  1179. X              }
  1180. X!             if (fcode == 'S')
  1181. X!                 m->m_s_rwset = i;
  1182. X!             else
  1183. X!                 m->m_r_rwset = i;
  1184. X              break;
  1185. X  
  1186. X            case 'E':        /* end of line string */
  1187. X--- 454,482 ----
  1188. X                  syserr("invalid rewrite set, %d max", MAXRWSETS);
  1189. X                  return;
  1190. X              }
  1191. X!             /* default envelope ruleset for header ruleset */
  1192. X!             if (fcode == 'S') {
  1193. X!                 m->m_se_rwset = i;
  1194. X!                 m->m_sh_rwset = i;
  1195. X!             } else {
  1196. X!                 m->m_re_rwset = i;
  1197. X!                 m->m_rh_rwset = i;
  1198. X!             }
  1199. X!             /* look for specific header rewriting ruleset */
  1200. X!             while (*p != '\0' && *p != ',' && *p != '/') p++;
  1201. X!             if (*p++ == '/') {
  1202. X!                 i = atoi(p);
  1203. X!                 if (i < 0 || i >= MAXRWSETS)
  1204. X!                 {
  1205. X!                     syserr("invalid rewrite set, %d max",
  1206. X!                            MAXRWSETS);
  1207. X!                     return;
  1208. X!                 }
  1209. X!                 if (fcode == 'S')
  1210. X!                     m->m_sh_rwset = i;
  1211. X!                 else
  1212. X!                     m->m_rh_rwset = i;
  1213. X!             }
  1214. X              break;
  1215. X  
  1216. X            case 'E':        /* end of line string */
  1217. X***************
  1218. X*** 803,809 ****
  1219. X        case 'i':        /* ignore dot lines in message */
  1220. X          IgnrDot = atobool(val);
  1221. X          break;
  1222. X! 
  1223. X        case 'L':        /* log level */
  1224. X          LogLevel = atoi(val);
  1225. X          break;
  1226. X--- 828,839 ----
  1227. X        case 'i':        /* ignore dot lines in message */
  1228. X          IgnrDot = atobool(val);
  1229. X          break;
  1230. X! # ifdef NDBM
  1231. X!       case 'K':        /* keyed database file */
  1232. X!         if (*val != '\0')
  1233. X!             DbmTab[*val & 0177].db_name = newstr(&val[1]);
  1234. X!         break;
  1235. X! # endif NDBM
  1236. X        case 'L':        /* log level */
  1237. X          LogLevel = atoi(val);
  1238. X          break;
  1239. X***************
  1240. X*** 909,914 ****
  1241. X--- 939,948 ----
  1242. X  
  1243. X        case 'Z':        /* work time factor */
  1244. X          WkTimeFact = atoi(val);
  1245. X+         break;
  1246. X+ 
  1247. X+       case '/':        /* use split envelope/header rewriting */
  1248. X+         SplitRewriting = TRUE;
  1249. X          break;
  1250. X  
  1251. X        default:
  1252. END_OF_ida/patches/readcf.c.diff
  1253. if test 2959 -ne `wc -c <ida/patches/readcf.c.diff`; then
  1254.     echo shar: \"ida/patches/readcf.c.diff\" unpacked with wrong size!
  1255. fi
  1256. # end of overwriting check
  1257. fi
  1258. if test -f ida/patches/savemail.c.diff -a "${1}" != "-c" ; then 
  1259.   echo shar: Will not over-write existing file \"ida/patches/savemail.c.diff\"
  1260. else
  1261. echo shar: Extracting \"ida/patches/savemail.c.diff\" \(2370 characters\)
  1262. sed "s/^X//" >ida/patches/savemail.c.diff <<'END_OF_ida/patches/savemail.c.diff'
  1263. X*** savemail.c.orig    Mon Mar 14 03:54:08 1988
  1264. X--- savemail.c    Thu Sep  1 20:32:33 1988
  1265. X***************
  1266. X*** 371,377 ****
  1267. X      extern ENVELOPE *newenvelope();
  1268. X      ENVELOPE errenvelope;
  1269. X      static int returndepth;
  1270. X!     register ADDRESS *q;
  1271. X  
  1272. X  # ifdef DEBUG
  1273. X      if (tTd(6, 1))
  1274. X--- 371,379 ----
  1275. X      extern ENVELOPE *newenvelope();
  1276. X      ENVELOPE errenvelope;
  1277. X      static int returndepth;
  1278. X!     register ADDRESS *p, *q;
  1279. X!     char *to, *cc;
  1280. X!     int len;
  1281. X  
  1282. X  # ifdef DEBUG
  1283. X      if (tTd(6, 1))
  1284. X***************
  1285. X*** 396,411 ****
  1286. X      define('g', "\001f", CurEnv);
  1287. X      ee = newenvelope(&errenvelope);
  1288. X      define('a', "\001b", ee);
  1289. X      ee->e_puthdr = putheader;
  1290. X      ee->e_putbody = errbody;
  1291. X      ee->e_flags |= EF_RESPONSE;
  1292. X      ee->e_sendqueue = returnq;
  1293. X      openxscript(ee);
  1294. X!     for (q = returnq; q != NULL; q = q->q_next)
  1295. X!     {
  1296. X!         if (q->q_alias == NULL)
  1297. X!             addheader("to", q->q_paddr, ee);
  1298. X      }
  1299. X  
  1300. X      (void) sprintf(buf, "Returned mail: %s", msg);
  1301. X      addheader("subject", buf, ee);
  1302. X--- 398,447 ----
  1303. X      define('g', "\001f", CurEnv);
  1304. X      ee = newenvelope(&errenvelope);
  1305. X      define('a', "\001b", ee);
  1306. X+     /* undefine sending host & proto for error msg */
  1307. X+     define('s', MACNULL, ee);
  1308. X+     define('r', MACNULL, ee);
  1309. X      ee->e_puthdr = putheader;
  1310. X      ee->e_putbody = errbody;
  1311. X      ee->e_flags |= EF_RESPONSE;
  1312. X      ee->e_sendqueue = returnq;
  1313. X      openxscript(ee);
  1314. X! 
  1315. X!     /* put the recipients in the to: header (cc: for PostMasterCopy) */
  1316. X!     cc = NULL;
  1317. X!     to = buf;
  1318. X!     for (q = returnq; q != NULL; q = q->q_next) {
  1319. X!         if (q->q_alias == NULL)
  1320. X!         if (strcmp(q->q_paddr, PostMasterCopy) == 0)
  1321. X!             cc = q->q_paddr;
  1322. X!         else {
  1323. X!             /* Not Postmaster; already on the To: line? */
  1324. X!             for (p = returnq; p != q; p = p->q_next)
  1325. X!             if (strcasecmp(p->q_paddr, q->q_paddr) == 0)
  1326. X!                 break;
  1327. X!             if (p == q) {
  1328. X!             /* No, add it */
  1329. X!             *to++ = ',';
  1330. X!             *to++ = ' ';
  1331. X! 
  1332. X!             len = strlen(q->q_paddr);
  1333. X!             if (q->q_paddr[0] == '<' && q->q_paddr[len-1] == '>' &&
  1334. X!                 q->q_paddr[1] != '@') {
  1335. X!                 /* Remove angle brackets; they aren't needed */
  1336. X!                 strncpy(to, q->q_paddr+1, len-2);
  1337. X!                 to += len-2;
  1338. X!             } else {
  1339. X!                 strcpy(to, q->q_paddr, len);
  1340. X!                 to += len;
  1341. X!             }
  1342. X!             }
  1343. X!         }
  1344. X      }
  1345. X+     *to = '\0';
  1346. X+     if (to != buf)
  1347. X+         addheader("to", buf+2, ee);
  1348. X+     if (cc)
  1349. X+         addheader("cc", cc, ee);
  1350. X  
  1351. X      (void) sprintf(buf, "Returned mail: %s", msg);
  1352. X      addheader("subject", buf, ee);
  1353. END_OF_ida/patches/savemail.c.diff
  1354. if test 2370 -ne `wc -c <ida/patches/savemail.c.diff`; then
  1355.     echo shar: \"ida/patches/savemail.c.diff\" unpacked with wrong size!
  1356. fi
  1357. # end of overwriting check
  1358. fi
  1359. if test -f ida/patches/srvrsmtp.c.diff -a "${1}" != "-c" ; then 
  1360.   echo shar: Will not over-write existing file \"ida/patches/srvrsmtp.c.diff\"
  1361. else
  1362. echo shar: Extracting \"ida/patches/srvrsmtp.c.diff\" \(4658 characters\)
  1363. sed "s/^X//" >ida/patches/srvrsmtp.c.diff <<'END_OF_ida/patches/srvrsmtp.c.diff'
  1364. X*** srvrsmtp.c.orig    Mon Mar 14 05:31:55 1988
  1365. X--- srvrsmtp.c    Thu Aug 25 13:57:07 1988
  1366. X***************
  1367. X*** 101,107 ****
  1368. X  
  1369. X  #define EX_QUIT        22        /* special code for QUIT command */
  1370. X  
  1371. X! smtp()
  1372. X  {
  1373. X      register char *p;
  1374. X      register struct cmd *c;
  1375. X--- 101,108 ----
  1376. X  
  1377. X  #define EX_QUIT        22        /* special code for QUIT command */
  1378. X  
  1379. X! smtp(batched)
  1380. X!     bool batched;            /* running non-interactively? */
  1381. X  {
  1382. X      register char *p;
  1383. X      register struct cmd *c;
  1384. X***************
  1385. X*** 114,119 ****
  1386. X--- 115,121 ----
  1387. X      char inp[MAXLINE];
  1388. X      char cmdbuf[100];
  1389. X      extern char Version[];
  1390. X+     char hostbuf[MAXNAME];        /* for host name transformations */
  1391. X      extern tick();
  1392. X      extern bool iswiz();
  1393. X      extern char *arpadate();
  1394. X***************
  1395. X*** 201,207 ****
  1396. X            case CMDHELO:        /* hello -- introduce yourself */
  1397. X              SmtpPhase = "HELO";
  1398. X              setproctitle("%s: %s", CurHostName, inp);
  1399. X!             if (!strcasecmp(p, MyHostName))
  1400. X              {
  1401. X                  /* connected to an echo server */
  1402. X                  message("553", "%s I refuse to talk to myself",
  1403. X--- 203,212 ----
  1404. X            case CMDHELO:        /* hello -- introduce yourself */
  1405. X              SmtpPhase = "HELO";
  1406. X              setproctitle("%s: %s", CurHostName, inp);
  1407. X!             /* find canonical name */
  1408. X!             strcpy(hostbuf, p);
  1409. X!             maphostname(hostbuf, sizeof(hostbuf));
  1410. X!             if (!strcasecmp(hostbuf, MyHostName))
  1411. X              {
  1412. X                  /* connected to an echo server */
  1413. X                  message("553", "%s I refuse to talk to myself",
  1414. X***************
  1415. X*** 208,224 ****
  1416. X                      MyHostName);
  1417. X                  break;
  1418. X              }
  1419. X!             if (RealHostName != NULL && strcasecmp(p, RealHostName))
  1420. X              {
  1421. X-                 char hostbuf[MAXNAME];
  1422. X- 
  1423. X                  (void) sprintf(hostbuf, "%s (%s)", p, RealHostName);
  1424. X                  sendinghost = newstr(hostbuf);
  1425. X!             }
  1426. X!             else
  1427. X                  sendinghost = newstr(p);
  1428. X!             message("250", "%s Hello %s, pleased to meet you",
  1429. X!                 MyHostName, p);
  1430. X              break;
  1431. X  
  1432. X            case CMDMAIL:        /* mail -- designate sender */
  1433. X--- 213,228 ----
  1434. X                      MyHostName);
  1435. X                  break;
  1436. X              }
  1437. X!             if (RealHostName != NULL && strcasecmp(hostbuf, RealHostName))
  1438. X              {
  1439. X                  (void) sprintf(hostbuf, "%s (%s)", p, RealHostName);
  1440. X                  sendinghost = newstr(hostbuf);
  1441. X!                 message("250", "Hello %s, why do you call yourself %s?",
  1442. X!                     RealHostName, p);
  1443. X!             } else {
  1444. X                  sendinghost = newstr(p);
  1445. X!                 message("250", "Hello %s, pleased to meet you", p);
  1446. X!             }
  1447. X              break;
  1448. X  
  1449. X            case CMDMAIL:        /* mail -- designate sender */
  1450. X***************
  1451. X*** 243,248 ****
  1452. X--- 247,253 ----
  1453. X              /* fork a subprocess to process this command */
  1454. X              if (runinchild("SMTP-MAIL") > 0)
  1455. X                  break;
  1456. X+             define('r', "SMTP", CurEnv);
  1457. X              define('s', sendinghost, CurEnv);
  1458. X              initsys();
  1459. X              setproctitle("%s %s: %s", CurEnv->e_id,
  1460. X***************
  1461. X*** 268,274 ****
  1462. X                  CurHostName, inp);
  1463. X              if (setjmp(TopFrame) > 0)
  1464. X              {
  1465. X!                 CurEnv->e_flags &= ~EF_FATALERRS;
  1466. X                  break;
  1467. X              }
  1468. X              QuickAbort = TRUE;
  1469. X--- 273,280 ----
  1470. X                  CurHostName, inp);
  1471. X              if (setjmp(TopFrame) > 0)
  1472. X              {
  1473. X!                 if (!batched)
  1474. X!                     CurEnv->e_flags &= ~EF_FATALERRS;
  1475. X                  break;
  1476. X              }
  1477. X              QuickAbort = TRUE;
  1478. X***************
  1479. X*** 299,311 ****
  1480. X              SmtpPhase = "DATA";
  1481. X              if (!hasmail)
  1482. X              {
  1483. X!                 message("503", "Need MAIL command");
  1484. X!                 break;
  1485. X              }
  1486. X              else if (CurEnv->e_nrcpts <= 0)
  1487. X              {
  1488. X!                 message("503", "Need RCPT (recipient)");
  1489. X!                 break;
  1490. X              }
  1491. X  
  1492. X              /* collect the text of the message */
  1493. X--- 305,323 ----
  1494. X              SmtpPhase = "DATA";
  1495. X              if (!hasmail)
  1496. X              {
  1497. X!                 message("503", "Need valid MAIL command");
  1498. X!                 if (batched)
  1499. X!                     Errors++;
  1500. X!                 else
  1501. X!                     break;
  1502. X              }
  1503. X              else if (CurEnv->e_nrcpts <= 0)
  1504. X              {
  1505. X!                 message("503", "Need valid RCPT (recipient)");
  1506. X!                 if (batched)
  1507. X!                     Errors++;
  1508. X!                 else
  1509. X!                     break;
  1510. X              }
  1511. X  
  1512. X              /* collect the text of the message */
  1513. X***************
  1514. X*** 335,347 ****
  1515. X              */
  1516. X  
  1517. X              SmtpPhase = "delivery";
  1518. X!             if (CurEnv->e_nrcpts != 1)
  1519. X              {
  1520. X                  HoldErrs = TRUE;
  1521. X                  ErrorMode = EM_MAIL;
  1522. X              }
  1523. X!             CurEnv->e_flags &= ~EF_FATALERRS;
  1524. X!             CurEnv->e_xfp = freopen(queuename(CurEnv, 'x'), "w", CurEnv->e_xfp);
  1525. X  
  1526. X              /* send to all recipients */
  1527. X              sendall(CurEnv, SM_DEFAULT);
  1528. X--- 347,362 ----
  1529. X              */
  1530. X  
  1531. X              SmtpPhase = "delivery";
  1532. X!             if (CurEnv->e_nrcpts != 1 || batched)
  1533. X              {
  1534. X                  HoldErrs = TRUE;
  1535. X                  ErrorMode = EM_MAIL;
  1536. X              }
  1537. X!             if (!batched) {
  1538. X!                 CurEnv->e_flags &= ~EF_FATALERRS;
  1539. X!                 CurEnv->e_xfp = freopen(queuename(CurEnv, 'x'),
  1540. X!                             "w", CurEnv->e_xfp);
  1541. X!             }
  1542. X  
  1543. X              /* send to all recipients */
  1544. X              sendall(CurEnv, SM_DEFAULT);
  1545. X***************
  1546. X*** 681,687 ****
  1547. X      }
  1548. X  
  1549. X      /* open alias database */
  1550. X!     initaliases(AliasFile, FALSE);
  1551. X  
  1552. X      return (0);
  1553. X  }
  1554. X--- 696,702 ----
  1555. X      }
  1556. X  
  1557. X      /* open alias database */
  1558. X!     initaliases(FALSE);
  1559. X  
  1560. X      return (0);
  1561. X  }
  1562. END_OF_ida/patches/srvrsmtp.c.diff
  1563. if test 4658 -ne `wc -c <ida/patches/srvrsmtp.c.diff`; then
  1564.     echo shar: \"ida/patches/srvrsmtp.c.diff\" unpacked with wrong size!
  1565. fi
  1566. # end of overwriting check
  1567. fi
  1568. if test -f ida/patches/usersmtp.c.diff -a "${1}" != "-c" ; then 
  1569.   echo shar: Will not over-write existing file \"ida/patches/usersmtp.c.diff\"
  1570. else
  1571. echo shar: Extracting \"ida/patches/usersmtp.c.diff\" \(3370 characters\)
  1572. sed "s/^X//" >ida/patches/usersmtp.c.diff <<'END_OF_ida/patches/usersmtp.c.diff'
  1573. X*** usersmtp.c.orig    Mon Mar 14 03:54:14 1988
  1574. X--- usersmtp.c    Thu Sep 15 22:03:01 1988
  1575. X***************
  1576. X*** 37,42 ****
  1577. X--- 37,43 ----
  1578. X  
  1579. X  #define REPLYTYPE(r)    ((r) / 100)        /* first digit of reply code */
  1580. X  #define REPLYCLASS(r)    (((r) / 10) % 10)    /* second digit of reply code */
  1581. X+ #define SMTPGOODREPLY    250            /* positive SMTP response */
  1582. X  #define SMTPCLOSING    421            /* "Service Shutting Down" */
  1583. X  
  1584. X  char    SmtpMsgBuffer[MAXLINE];        /* buffer for commands */
  1585. X***************
  1586. X*** 112,124 ****
  1587. X              {
  1588. X                  p = statstring(ExitStat);
  1589. X                  fprintf(CurEnv->e_xfp,
  1590. X!                     "%.3s %s.%s... %s\n",
  1591. X                      p, pvp[1], m->m_name, p);
  1592. X              }
  1593. X              else
  1594. X              {
  1595. X                  fprintf(CurEnv->e_xfp,
  1596. X!                     "421 %s.%s... Deferred: %s\n",
  1597. X                      pvp[1], m->m_name, errstring(errno));
  1598. X              }
  1599. X          }
  1600. X--- 113,125 ----
  1601. X              {
  1602. X                  p = statstring(ExitStat);
  1603. X                  fprintf(CurEnv->e_xfp,
  1604. X!                     "%.3s %s (%s)... %s\n",
  1605. X                      p, pvp[1], m->m_name, p);
  1606. X              }
  1607. X              else
  1608. X              {
  1609. X                  fprintf(CurEnv->e_xfp,
  1610. X!                     "421 %s (%s)... Deferred: %s\n",
  1611. X                      pvp[1], m->m_name, errstring(errno));
  1612. X              }
  1613. X          }
  1614. X***************
  1615. X*** 244,250 ****
  1616. X      register int r;
  1617. X      extern char *remotename();
  1618. X  
  1619. X!     smtpmessage("RCPT To:<%s>", m, remotename(to->q_user, m, FALSE, TRUE));
  1620. X  
  1621. X      SmtpPhase = "RCPT wait";
  1622. X      r = reply(m);
  1623. X--- 245,260 ----
  1624. X      register int r;
  1625. X      extern char *remotename();
  1626. X  
  1627. X!     /* DISABLED since I didn't understand why further rewriting
  1628. X!        should be necessary.  Since it doesn't go through ruleset 0
  1629. X!        on this second rewriting (which it should since it's a
  1630. X!        envelope recipient address) there is even the risk that it
  1631. X!        gets screwed up.
  1632. X!                         -- lel@ida.liu.se
  1633. X!     smtpmessage("RCPT To:<%s>", m, remotename(to->q_user, m, FALSE, TRUE,
  1634. X!                           FALSE));
  1635. X!     */
  1636. X!     smtpmessage("RCPT To:<%s>", m, to->q_user);
  1637. X  
  1638. X      SmtpPhase = "RCPT wait";
  1639. X      r = reply(m);
  1640. X***************
  1641. X*** 294,300 ****
  1642. X          return (EX_TEMPFAIL);
  1643. X      else if (r == 554)
  1644. X          return (EX_UNAVAILABLE);
  1645. X!     else if (r != 354)
  1646. X          return (EX_PROTOCOL);
  1647. X  
  1648. X      /* now output the actual message */
  1649. X--- 304,310 ----
  1650. X          return (EX_TEMPFAIL);
  1651. X      else if (r == 554)
  1652. X          return (EX_UNAVAILABLE);
  1653. X!     else if (r != 354 && r != 250)
  1654. X          return (EX_PROTOCOL);
  1655. X  
  1656. X      /* now output the actual message */
  1657. X***************
  1658. X*** 381,386 ****
  1659. X--- 391,399 ----
  1660. X      if (tTd(18, 1))
  1661. X          printf("reply\n");
  1662. X  
  1663. X+     if (bitnset(M_BSMTP, m->m_flags))
  1664. X+         return (SMTPGOODREPLY);
  1665. X+ 
  1666. X      /*
  1667. X      **  Read the input line, being careful not to hang.
  1668. X      */
  1669. X***************
  1670. X*** 413,419 ****
  1671. X                  errno = EPIPE;
  1672. X  # endif ECONNRESET
  1673. X  
  1674. X!             message(Arpa_TSyserr, "reply: read error");
  1675. X  # ifdef DEBUG
  1676. X              /* if debugging, pause so we can see state */
  1677. X              if (tTd(18, 100))
  1678. X--- 426,432 ----
  1679. X                  errno = EPIPE;
  1680. X  # endif ECONNRESET
  1681. X  
  1682. X!             message(Arpa_TSyserr, "Connection ended prematurely");
  1683. X  # ifdef DEBUG
  1684. X              /* if debugging, pause so we can see state */
  1685. X              if (tTd(18, 100))
  1686. X***************
  1687. X*** 431,436 ****
  1688. X--- 444,453 ----
  1689. X          if (CurEnv->e_xfp != NULL && index("45", SmtpReplyBuffer[0]) != NULL)
  1690. X          {
  1691. X              /* serious error -- log the previous command */
  1692. X+             /* also record who we were talking before first error */
  1693. X+             if (SmtpError[0] == '\0')
  1694. X+                 fprintf(CurEnv->e_xfp, "While talking to %s:\n",
  1695. X+                     CurHostName);
  1696. X              if (SmtpMsgBuffer[0] != '\0')
  1697. X                  fprintf(CurEnv->e_xfp, ">>> %s\n", SmtpMsgBuffer);
  1698. X              SmtpMsgBuffer[0] = '\0';
  1699. END_OF_ida/patches/usersmtp.c.diff
  1700. if test 3370 -ne `wc -c <ida/patches/usersmtp.c.diff`; then
  1701.     echo shar: \"ida/patches/usersmtp.c.diff\" unpacked with wrong size!
  1702. fi
  1703. # end of overwriting check
  1704. fi
  1705. if test -f ida/patches/util.c.diff -a "${1}" != "-c" ; then 
  1706.   echo shar: Will not over-write existing file \"ida/patches/util.c.diff\"
  1707. else
  1708. echo shar: Extracting \"ida/patches/util.c.diff\" \(2377 characters\)
  1709. sed "s/^X//" >ida/patches/util.c.diff <<'END_OF_ida/patches/util.c.diff'
  1710. X*** util.c.orig    Mon Mar 14 05:23:49 1988
  1711. X--- util.c    Fri Aug 26 03:56:07 1988
  1712. X***************
  1713. X*** 19,24 ****
  1714. X--- 19,26 ----
  1715. X  # include <errno.h>
  1716. X  # include "sendmail.h"
  1717. X  
  1718. X+ bool catPrint = FALSE;        /* xputs: print strings for catenation */
  1719. X+ 
  1720. X  /*
  1721. X  **  STRIPQUOTES -- Strip quotes & quote bits from a string.
  1722. X  **
  1723. X***************
  1724. X*** 260,272 ****
  1725. X      register char *s;
  1726. X  {
  1727. X      register char c;
  1728. X  
  1729. X      if (s == NULL)
  1730. X      {
  1731. X          printf("<null>");
  1732. X          return;
  1733. X      }
  1734. X!     (void) putchar('"');
  1735. X      while ((c = *s++) != '\0')
  1736. X      {
  1737. X          if (!isascii(c))
  1738. X--- 262,292 ----
  1739. X      register char *s;
  1740. X  {
  1741. X      register char c;
  1742. X+     register struct metamac *m;
  1743. X  
  1744. X+     if (s == MACNULL)
  1745. X+     {
  1746. X+         printf("<macnull>");
  1747. X+         return;
  1748. X+     }
  1749. X      if (s == NULL)
  1750. X      {
  1751. X          printf("<null>");
  1752. X          return;
  1753. X      }
  1754. X! 
  1755. X!     if (s[0] == MATCHREPL && isdigit(s[1]) && s[2] == '\0') {
  1756. X!       printf("$%c", s[1]);
  1757. X!       return;
  1758. X!     } else
  1759. X!       for (m = MetaMacros; m->metaname != '\0'; m++)
  1760. X!         if (m->metaval == *s) {
  1761. X!           printf("$%c%s", m->metaname, &s[1]);
  1762. X!           return;
  1763. X!         }
  1764. X! 
  1765. X!     if (!catPrint)
  1766. X!         (void) putchar('"');
  1767. X      while ((c = *s++) != '\0')
  1768. X      {
  1769. X          if (!isascii(c))
  1770. X***************
  1771. X*** 281,287 ****
  1772. X          }
  1773. X          (void) putchar(c);
  1774. X      }
  1775. X!     (void) putchar('"');
  1776. X      (void) fflush(stdout);
  1777. X  }
  1778. X   /*
  1779. X--- 301,308 ----
  1780. X          }
  1781. X          (void) putchar(c);
  1782. X      }
  1783. X!     if (!catPrint)
  1784. X!         (void) putchar('"');
  1785. X      (void) fflush(stdout);
  1786. X  }
  1787. X   /*
  1788. X***************
  1789. X*** 305,315 ****
  1790. X      register char *p;
  1791. X  {
  1792. X      register char c;
  1793. X  
  1794. X      if (p == NULL)
  1795. X          return;
  1796. X      for (; (c = *p) != '\0'; p++)
  1797. X!         if (isascii(c) && isupper(c))
  1798. X              *p = c - 'A' + 'a';
  1799. X  }
  1800. X   /*
  1801. X--- 326,339 ----
  1802. X      register char *p;
  1803. X  {
  1804. X      register char c;
  1805. X+     register bool quoted_string = FALSE;
  1806. X  
  1807. X      if (p == NULL)
  1808. X          return;
  1809. X      for (; (c = *p) != '\0'; p++)
  1810. X!         if (c == '"')
  1811. X!             quoted_string = !quoted_string;
  1812. X!         else if (!quoted_string && isascii(c) && isupper(c))
  1813. X              *p = c - 'A' + 'a';
  1814. X  }
  1815. X   /*
  1816. X***************
  1817. X*** 861,864 ****
  1818. X--- 885,911 ----
  1819. X          if (map[i] != 0)
  1820. X              return (FALSE);
  1821. X      return (TRUE);
  1822. X+ }
  1823. X+ 
  1824. X+ /*
  1825. X+ **    PRINTCAV -- Print concatenated argument vector
  1826. X+ **
  1827. X+ **    Parameters:
  1828. X+ **        av -- argument vector.
  1829. X+ **
  1830. X+ **    Returns:
  1831. X+ **        none.
  1832. X+ **
  1833. X+ **    Side Effects:
  1834. X+ **        prints av.
  1835. X+ */
  1836. X+ 
  1837. X+ printcav(av)
  1838. X+      register char **av;
  1839. X+ {
  1840. X+   bool oldCatPrint = catPrint;
  1841. X+ 
  1842. X+   catPrint = TRUE;
  1843. X+   printav(av);
  1844. X+   catPrint = oldCatPrint;
  1845. X  }
  1846. END_OF_ida/patches/util.c.diff
  1847. if test 2377 -ne `wc -c <ida/patches/util.c.diff`; then
  1848.     echo shar: \"ida/patches/util.c.diff\" unpacked with wrong size!
  1849. fi
  1850. # end of overwriting check
  1851. fi
  1852. echo shar: End of archive 2 \(of 8\).
  1853. cp /dev/null ark2isdone
  1854. MISSING=""
  1855. for I in 1 2 3 4 5 6 7 8 ; do
  1856.     if test ! -f ark${I}isdone ; then
  1857.     MISSING="${MISSING} ${I}"
  1858.     fi
  1859. done
  1860. if test "${MISSING}" = "" ; then
  1861.     echo You have unpacked all 8 archives.
  1862.     echo "See ida/README and ida/INSTALL for further directions."
  1863.     rm -f ark[1-9]isdone
  1864. else
  1865.     echo You still need to unpack the following archives:
  1866.     echo "        " ${MISSING}
  1867. fi
  1868. ##  End of shell archive.
  1869. exit 0
  1870.  
  1871.