home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #20 / NN_1992_20.iso / spool / comp / sources / misc / 3924 < prev    next >
Encoding:
Text File  |  1992-09-11  |  20.0 KB  |  613 lines

  1. Newsgroups: comp.sources.misc
  2. Path: sparky!kent
  3. From: wietse@wzv.win.tue.nl (Wietse Venema)
  4. Subject:  REPOST: v31i134:  log_tcp - TCP/IP daemon wrapper, Patch02
  5. Message-ID: <1992Sep11.150041.28736@sparky.imd.sterling.com>
  6. Followup-To: comp.sources.d
  7. X-Md4-Signature: ca5c1b82ed6e50a766b1acf9946b3cfc
  8. Sender: kent@sparky.imd.sterling.com (Kent Landfield)
  9. Organization: Eindhoven University of Technology, The Netherlands
  10. References: <1992Sep2.213551.27770@sparky.imd.sterling.com>
  11. Date: Fri, 11 Sep 1992 15:00:41 GMT
  12. Approved: kent@sparky.imd.sterling.com
  13. Lines: 598
  14.  
  15. Submitted-by: wietse@wzv.win.tue.nl (Wietse Venema)
  16. Posting-number: Volume 31, Issue 134
  17. Archive-name: log_tcp/patch02
  18. Environment: UNIX
  19. Patch-To: log_tcp: Volume 30, Issue 79-80
  20.  
  21. [ This is being reposted due to a serious propagation problem. -Kent+ ]
  22.  
  23. This is an interim patch that takes care of some rough edges that were
  24. left in last June's release. The patch does not introduce any new
  25. features or changes to installation and/or configuration procedures.
  26.  
  27. A fully-patched source kit can be found on ftp.win.tue.nl in the file
  28. /pub/security/log_tcp.shar.Z.  The archives on cert.org (in directory
  29. /pub/tools/wrappers) and on ftp.uu.net (in /pub/security) will be
  30. updated ASAP.
  31.  
  32.     - Some sites reported that connections would be rejected because
  33.     localhost != localhost.domain. The host name checking code now
  34.     special-cases localhost (problem reported by several sites).
  35.  
  36.     - The programs now report an error if an existing access control
  37.     file cannot be opened (e.g. due to lack of privileges).  Until now,
  38.     the programs would just pretend that the access control file does
  39.     not exist (reported by Darren Reed, avalon@coombs.anu.edu.au).
  40.  
  41.     - The timeout period for remote userid lookups was upped to 30
  42.     seconds, in order to cope with slow hosts or networks.  If this is
  43.     too long for you, adjust the TIMEOUT definition in file rfc931.c
  44.     (problem reported by several sites).
  45.  
  46.     - On hosts with more than one IP network interface, remote userid
  47.     lookups could use the IP address of the "wrong" local interface.
  48.     The problem and its solution were discussed on the rfc931-users
  49.     mailing list.  Scott Schwartz (schwartz@cs.psu.edu) folded the fix
  50.     into the rfc931.c module.
  51.  
  52.     - The result of % expansion (in shell commands) is now checked for
  53.     stuff that may confuse the shell; it is replaced by underscores
  54.     (problem reported by Icarus Sparry, I.Sparry@gdr.bath.ac.uk).
  55.  
  56.     - A portability problem was fixed that caused compile-time problems
  57.     on a CRAY (problem reported by Michael Barnett, mikeb@rmit.edu.au).
  58.  
  59. Finally, a caveat for those who use the optional remote username lookup
  60. feature (RFC 931 protocol).  On some systems, these lookups may trigger
  61. a kernel bug.  When a client host connects to your system, and the RFC
  62. 931 connection to that client is rejected by a router, some kernels
  63. drop all connections with that client.  The bug is not in the log_tcp
  64. programs: complain to your vendor and don't enable remote user name
  65. lookups until the bug has been fixed.
  66.  
  67. The following example can be used (from outside the tue.nl domain) to
  68. find out if you have the bug:
  69.  
  70.     % ftp 131.155.70.100
  71.  
  72. Then, when the connection has been established, run the following
  73. command on the same machine:
  74.  
  75.     % telnet 131.155.70.100 111
  76.  
  77. The telnet command should fail with: "host not reachable". If this
  78. causes you to lose the ftp connection, you have the bug (please report
  79. OS and hardware type). If the telnet command does not fail, please let
  80. me know, too :-)
  81.  
  82.     Wietse Venema (wietse@wzv.win.tue.nl),
  83.     Department of Mathematics and Computing Science,
  84.     Eindhoven University of Technology,
  85.     The Netherlands.
  86.  
  87. Prereq: 1.7
  88. *** ./README-    Thu Jun 11 22:21:20 1992
  89. --- ./README    Mon Aug 31 22:54:43 1992
  90. ***************
  91. *** 1,4 ****
  92. ! @(#) README 1.7 92/06/11 22:21:17
  93.   
  94.   General description
  95.   -------------------
  96. --- 1,4 ----
  97. ! @(#) README 1.8 92/08/31 22:54:40
  98.   
  99.   General description
  100.   -------------------
  101. ***************
  102. *** 44,49 ****
  103. --- 44,70 ----
  104.   This makes it impossible for the daemon front ends to look up the
  105.   remote host address (and hence, the name) in case of UDP connections.
  106.   
  107. + On some systems, the optional RFC 931 remote username lookups may
  108. + trigger a kernel bug.  When a client host connects to your system, and
  109. + the RFC 931 connection to that client is rejected by a router, some
  110. + kernels drop all connections with that client.  This is not a bug in
  111. + the log_tcp programs: complain to your vendor, and don't enable
  112. + remote user name lookups until the bug has been fixed.
  113. + The following example can be used (from outside the tue.nl domain) to
  114. + find out if you have the bug:
  115. +     % ftp 131.155.70.100
  116. + Then, when the connection has been established, run the following
  117. + command on the same machine:
  118. +     % telnet 131.155.70.100 111
  119. + The telnet command should fail with: "host not reachable". If you lose
  120. + the ftp connection, you have the bug (please report OS and harware
  121. + type). If the telnet command does not fail, please let me know, too...
  122.   Access control
  123.   --------------
  124.   
  125. ***************
  126. *** 129,136 ****
  127.   servers provided with the authutil package (comp.sources.unix volume
  128.   22) by Dan Bernstein. This one relies on RFC 931.
  129.   
  130. ! Source for a reasonably fast and portable RFC 931 daemon by Peter
  131. ! Eriksson is available from ftp.lysator.liu.se:/pub/net/pauthd*.tar.Z.
  132.   
  133.   Some TCP/IP implementations come without syslog library. A replacement
  134.   can be found in ftp.win.tue.nl:/pub/security/surrogate-syslog.tar.Z.
  135. --- 150,157 ----
  136.   servers provided with the authutil package (comp.sources.unix volume
  137.   22) by Dan Bernstein. This one relies on RFC 931.
  138.   
  139. ! Source for a portable RFC 931-compatible daemon by Peter Eriksson is
  140. ! available from ftp.lysator.liu.se:/pub/ident/servers.
  141.   
  142.   Some TCP/IP implementations come without syslog library. A replacement
  143.   can be found in ftp.win.tue.nl:/pub/security/surrogate-syslog.tar.Z.
  144. Prereq: 1.5
  145. *** ./fromhost.c-    Thu Jun 11 22:21:25 1992
  146. --- ./fromhost.c    Mon Aug 24 21:46:16 1992
  147. ***************
  148. *** 15,21 ****
  149.     */
  150.   
  151.   #ifndef lint
  152. ! static char sccsid[] = "@(#) fromhost.c 1.5 92/06/11 22:21:24";
  153.   #endif
  154.   
  155.   /* System libraries. */
  156. --- 15,21 ----
  157.     */
  158.   
  159.   #ifndef lint
  160. ! static char sccsid[] = "@(#) fromhost.c 1.6 92/08/24 21:46:14";
  161.   #endif
  162.   
  163.   /* System libraries. */
  164. ***************
  165. *** 154,161 ****
  166.   
  167.       /* Look up the remote host name. */
  168.   
  169. !     if ((hp = gethostbyaddr((char *) &sin->sin_addr.s_addr,
  170. !                 sizeof(sin->sin_addr.s_addr),
  171.                   AF_INET)) == 0) {
  172.       return (0);
  173.       }
  174. --- 154,161 ----
  175.   
  176.       /* Look up the remote host name. */
  177.   
  178. !     if ((hp = gethostbyaddr((char *) &sin->sin_addr,
  179. !                 sizeof(sin->sin_addr),
  180.                   AF_INET)) == 0) {
  181.       return (0);
  182.       }
  183. ***************
  184. *** 199,205 ****
  185.   
  186.       } else {
  187.   
  188. !     if (strcasecmp(remotehost, hp->h_name)) {
  189.           syslog(LOG_ERR, "host name/name mismatch: %s != %s",
  190.              remotehost, hp->h_name);
  191.           return (BAD);
  192. --- 199,214 ----
  193.   
  194.       } else {
  195.   
  196. !     /*
  197. !      * Make sure that gethostbyname() returns the "correct" host name.
  198. !      * Unfortunately, gethostbyname("localhost") sometimes yields
  199. !      * "localhost.domain". Since the latter host name comes from the
  200. !      * local DNS, we just have to trust it (all bets are off if the local
  201. !      * DNS is perverted). We always check the address list, though.
  202. !      */
  203. !     if (strcasecmp(remotehost, hp->h_name)
  204. !         && strcasecmp(remotehost, "localhost")) {
  205.           syslog(LOG_ERR, "host name/name mismatch: %s != %s",
  206.              remotehost, hp->h_name);
  207.           return (BAD);
  208. Prereq: 1.2
  209. *** ./rfc931.c-    Mon Jun 22 16:32:15 1992
  210. --- ./rfc931.c    Mon Aug 31 22:54:47 1992
  211. ***************
  212. *** 11,17 ****
  213.     */
  214.   
  215.   #ifndef lint
  216. ! static char sccsid[] = "@(#) rfc931.c 1.2 92/06/22 16:32:14";
  217.   #endif
  218.   
  219.   #include <stdio.h>
  220. --- 11,17 ----
  221.     */
  222.   
  223.   #ifndef lint
  224. ! static char sccsid[] = "@(#) rfc931.c 1.3 92/08/31 22:54:46";
  225.   #endif
  226.   
  227.   #include <stdio.h>
  228. ***************
  229. *** 25,31 ****
  230.   #include "log_tcp.h"
  231.   
  232.   #define    RFC931_PORT    113        /* Semi-well-known port */
  233. ! #define    TIMEOUT        10        /* wait for at most 10 seconds */
  234.   
  235.   extern char *strchr();
  236.   
  237. --- 25,31 ----
  238.   #include "log_tcp.h"
  239.   
  240.   #define    RFC931_PORT    113        /* Semi-well-known port */
  241. ! #define    TIMEOUT        30        /* wait for at most 30 seconds */
  242.   
  243.   extern char *strchr();
  244.   
  245. ***************
  246. *** 55,61 ****
  247.       char   *cp;
  248.       char   *result = FROM_UNKNOWN;
  249.   
  250. !     /* Find out local port number of our stdin. */
  251.   
  252.       length = sizeof(here);
  253.       if (getsockname(0, (struct sockaddr *) & here, &length) == -1) {
  254. --- 55,61 ----
  255.       char   *cp;
  256.       char   *result = FROM_UNKNOWN;
  257.   
  258. !     /* Find out local address and port number of stdin. */
  259.   
  260.       length = sizeof(here);
  261.       if (getsockname(0, (struct sockaddr *) & here, &length) == -1) {
  262. ***************
  263. *** 62,71 ****
  264.       syslog(LOG_ERR, "getsockname: %m");
  265.       return (result);
  266.       }
  267. -     /* Set up timer so we won't get stuck. */
  268.   
  269.       if ((s = socket(AF_INET, SOCK_STREAM, 0)) == -1)
  270.       return (result);
  271.       signal(SIGALRM, timeout);
  272.       if (setjmp(timebuf)) {
  273.       close(s);                /* not: fclose(fp) */
  274. --- 62,86 ----
  275.       syslog(LOG_ERR, "getsockname: %m");
  276.       return (result);
  277.       }
  278.   
  279. +     /*
  280. +      * The socket that will be used for user name lookups should be bound to
  281. +      * the same local IP address as stdin. This will automagically happen on
  282. +      * hosts that have only one IP network interface. When the local host has
  283. +      * more than one IP network interface we must do an explicit bind() call.
  284. +      */
  285.       if ((s = socket(AF_INET, SOCK_STREAM, 0)) == -1)
  286.       return (result);
  287. +     sin = here;
  288. +     sin.sin_port = 0;
  289. +     if (bind(s, (struct sockaddr *) & sin, sizeof sin) < 0) {
  290. +     syslog(LOG_ERR, "bind: %s: %m", inet_ntoa(here.sin_addr));
  291. +     return (result);
  292. +     }
  293. +     /* Set up timer so we won't get stuck. */
  294.       signal(SIGALRM, timeout);
  295.       if (setjmp(timebuf)) {
  296.       close(s);                /* not: fclose(fp) */
  297. Prereq: 1.1
  298. *** ./percent_x.c-    Thu Jun 11 22:21:50 1992
  299. --- ./percent_x.c    Mon Aug 24 21:46:23 1992
  300. ***************
  301. *** 2,8 ****
  302.     * percent_x() takes a string and performs %a (host address), %c (client
  303.     * info), %h (host name or address), %d (daemon name), %p (process id) and
  304.     * %u (user name) substitutions. It aborts the program when the result of
  305. !   * expansion would overflow the output buffer.
  306.     * 
  307.     * Diagnostics are reported through syslog(3).
  308.     * 
  309. --- 2,10 ----
  310.     * percent_x() takes a string and performs %a (host address), %c (client
  311.     * info), %h (host name or address), %d (daemon name), %p (process id) and
  312.     * %u (user name) substitutions. It aborts the program when the result of
  313. !   * expansion would overflow the output buffer. Because the result of %<char>
  314. !   * expansion is typically passed on to a shell process, characters that may
  315. !   * confuse the shell are replaced by underscores.
  316.     * 
  317.     * Diagnostics are reported through syslog(3).
  318.     * 
  319. ***************
  320. *** 10,16 ****
  321.     */
  322.   
  323.   #ifndef lint
  324. ! static char sccsid[] = "@(#) percent_x.c 1.1 92/06/11 22:21:49";
  325.   #endif
  326.   
  327.   /* System libraries. */
  328. --- 12,18 ----
  329.     */
  330.   
  331.   #ifndef lint
  332. ! static char sccsid[] = "@(#) percent_x.c 1.2 92/08/24 21:46:22";
  333.   #endif
  334.   
  335.   /* System libraries. */
  336. ***************
  337. *** 19,24 ****
  338. --- 21,27 ----
  339.   #include <syslog.h>
  340.   
  341.   extern char *strncpy();
  342. + extern char *strchr();
  343.   extern void exit();
  344.   
  345.   /* Local stuff. */
  346. ***************
  347. *** 39,44 ****
  348. --- 42,51 ----
  349.       char   *expansion;
  350.       int     expansion_len;
  351.       char    pid_buf[10];
  352. +     static char ok_chars[] = "1234567890!@%-_=+\\:,./\
  353. + abcdefghijklmnopqrstuvwxyz\
  354. + ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  355. +     char   *cp;
  356.   
  357.       /*
  358.        * %a becomes the client address; %c all user and host information we
  359. ***************
  360. *** 45,51 ****
  361.        * have about the client; %d the daemon process name; %h the client host
  362.        * name or address; %p the daemon process id; %u the remote user name; %%
  363.        * becomes a %, and %other is ignored. We terminate with a diagnostic if
  364. !      * we would overflow the result buffer.
  365.        */
  366.   
  367.       while (*str) {
  368. --- 52,59 ----
  369.        * have about the client; %d the daemon process name; %h the client host
  370.        * name or address; %p the daemon process id; %u the remote user name; %%
  371.        * becomes a %, and %other is ignored. We terminate with a diagnostic if
  372. !      * we would overflow the result buffer. Characters that may confuse the
  373. !      * shell are mapped to underscores.
  374.        */
  375.   
  376.       while (*str) {
  377. ***************
  378. *** 61,66 ****
  379. --- 69,77 ----
  380.           *str == '%' ? (str++, "%") :
  381.           *str == 0 ? "" : (str++, "");
  382.           expansion_len = strlen(expansion);
  383. +         for (cp = expansion; *cp; cp++)
  384. +         if (strchr(ok_chars, *cp) == 0)
  385. +             *cp = '_';
  386.       } else {
  387.           expansion = str++;
  388.           expansion_len = 1;
  389. Prereq: 1.9
  390. *** ./hosts_access.5-    Thu Jun 11 22:21:39 1992
  391. --- ./hosts_access.5    Mon Aug 24 21:46:19 1992
  392. ***************
  393. *** 112,117 ****
  394. --- 112,119 ----
  395.   .IP %%
  396.   expands to a single `%\' character.
  397.   .PP
  398. + Characters in % expansions that may confuse the shell are replaced by
  399. + underscores.
  400.   The result is executed by a \fI/bin/sh\fR child process with standard
  401.   input, output and error connected to \fI/dev/null\fR.  Specify an `&\'
  402.   at the end of the command if you do not want to wait until it has
  403. ***************
  404. *** 216,219 ****
  405.   Department of Mathematics and Computing Science
  406.   Eindhoven University of Technology
  407.   Den Dolech 2, P.O. Box 513, 5600 MB Eindhoven, The Netherlands
  408. ! \" @(#) hosts_access.5 1.9 92/06/11 22:21:37
  409. --- 218,221 ----
  410.   Department of Mathematics and Computing Science
  411.   Eindhoven University of Technology
  412.   Den Dolech 2, P.O. Box 513, 5600 MB Eindhoven, The Netherlands
  413. ! \" @(#) hosts_access.5 1.10 92/08/24 21:46:17
  414. Prereq: 1.8
  415. *** ./hosts_access.c-    Fri Jun 12 15:56:29 1992
  416. --- ./hosts_access.c    Mon Aug 24 21:46:21 1992
  417. ***************
  418. *** 12,18 ****
  419.     */
  420.   
  421.   #ifndef lint
  422. ! static char sccsid[] = "@(#) hosts_access.c 1.8 92/06/12 15:55:52";
  423.   #endif
  424.   
  425.    /* System libraries. */
  426. --- 12,18 ----
  427.     */
  428.   
  429.   #ifndef lint
  430. ! static char sccsid[] = "@(#) hosts_access.c 1.9 92/08/24 21:46:19";
  431.   #endif
  432.   
  433.    /* System libraries. */
  434. ***************
  435. *** 24,29 ****
  436. --- 24,30 ----
  437.   #include <stdio.h>
  438.   #include <syslog.h>
  439.   #include <ctype.h>
  440. + #include <errno.h>
  441.   
  442.   extern char *fgets();
  443.   extern char *strchr();
  444. ***************
  445. *** 136,141 ****
  446. --- 137,144 ----
  447.           }
  448.       }
  449.       (void) fclose(fp);
  450. +     } else if (errno != ENOENT) {
  451. +     syslog(LOG_ERR, "cannot open %s: %m", table);
  452.       }
  453.       match = (sv_match == YES && cl_match == YES);
  454.       if (match && sh_cmd)
  455. Prereq: 1.5
  456. *** ./BLURB-    Thu Jun 11 22:21:41 1992
  457. --- ./BLURB    Mon Aug 31 22:54:45 1992
  458. ***************
  459. *** 1,4 ****
  460. ! @(#) BLURB 1.5 92/06/11 22:21:40
  461.   
  462.   This package provides a couple of tiny programs that monitor incoming
  463.   requests for IP services such as TFTP, EXEC, FTP, RSH, TELNET, RLOGIN,
  464. --- 1,4 ----
  465. ! @(#) BLURB 1.6 92/08/31 22:54:43
  466.   
  467.   This package provides a couple of tiny programs that monitor incoming
  468.   requests for IP services such as TFTP, EXEC, FTP, RSH, TELNET, RLOGIN,
  469. ***************
  470. *** 13,33 ****
  471.   host name and then invoke the real network daemon. No information is
  472.   exchanged with the remote client process.
  473.   
  474. ! Enhancements over the previous release are: 
  475.   
  476. !     1 - network daemons no longer have to live within a common directory
  477. !     2 - the access control code now uses both the host address and name
  478. !     3 - an access control pattern that supports netmasks
  479. !     4 - additional protection against forged host names
  480. !     5 - a pattern that matches hosts whose name or address lookup fails
  481. !     6 - an operator that prevents hosts or services from being matched
  482. !     7 - optional remote username lookup with the RFC 931 protocol
  483. !     8 - an optional umask to prevent the creation of world-writable files
  484. !     9 - hooks for access control language extensions
  485. !    10 - last but not least, thoroughly revised documentation.
  486.   
  487. ! Except for the change described under (2) the present version should be
  488. ! backwards compatible with earlier ones.
  489.   
  490.       Wietse Venema (wietse@wzv.win.tue.nl),
  491.       Department of Mathematics and Computing Science,
  492. --- 13,71 ----
  493.   host name and then invoke the real network daemon. No information is
  494.   exchanged with the remote client process.
  495.   
  496. ! This is an interim release that takes care of some rough edges that
  497. ! were left in last June's release. It does not introduce any new
  498. ! features or changes to installation and/or configuration procedures.
  499.   
  500. !     - Some sites reported that connections would be rejected because
  501. !     localhost != localhost.domain. The host name checking code now
  502. !     special-cases localhost (problem reported by several sites).
  503.   
  504. !     - The programs now report an error if an existing access control
  505. !     file cannot be opened (e.g. due to lack of privileges).  Until now,
  506. !     the programs would just pretend that the access control file does
  507. !     not exist (reported by Darren Reed, avalon@coombs.anu.edu.au).
  508. !     - The timeout period for remote userid lookups was upped to 30
  509. !     seconds, in order to cope with slow hosts or networks.  If this is
  510. !     too long for you, adjust the TIMEOUT definition in file rfc931.c
  511. !     (problem reported by several sites).
  512. !     - On hosts with more than one IP network interface, remote userid
  513. !     lookups could use the IP address of the "wrong" local interface.
  514. !     The problem and its solution were discussed on the rfc931-users
  515. !     mailing list.  Scott Schwartz (schwartz@cs.psu.edu) folded the fix
  516. !     into the rfc931.c module.
  517. !     - The result of % expansion (in shell commands) is now checked for
  518. !     stuff that may confuse the shell; it is replaced by underscores
  519. !     (problem reported by Icarus Sparry, I.Sparry@gdr.bath.ac.uk).
  520. !     - A portability problem was fixed that caused compile-time problems
  521. !     on a CRAY (problem reported by Michael Barnett, mikeb@rmit.edu.au).
  522. ! Finally, a caveat for those who use the optional remote username lookup
  523. ! feature (RFC 931 protocol).  On some systems, these lookups may trigger
  524. ! a kernel bug.  When a client host connects to your system, and the RFC
  525. ! 931 connection to that client is rejected by a router, some kernels
  526. ! drop all connections with that client.  The bug is not in the log_tcp
  527. ! programs: complain to your vendor and don't enable remote user name
  528. ! lookups until the bug has been fixed.
  529. ! The following example can be used (from outside the tue.nl domain) to
  530. ! find out if you have the bug:
  531. !         % ftp 131.155.70.100
  532. ! Then, when the connection has been established, run the following
  533. ! command on the same machine:
  534. !         % telnet 131.155.70.100 111
  535. ! The telnet command should fail with: "host not reachable". If this
  536. ! causes you to lose the ftp connection, you have the bug (please report
  537. ! OS and hardware type). If the telnet command does not fail, please let
  538. ! me know, too :-)
  539.   
  540.       Wietse Venema (wietse@wzv.win.tue.nl),
  541.       Department of Mathematics and Computing Science,
  542. Prereq: 1.5
  543. *** ./Makefile-    Thu Jun 11 22:21:37 1992
  544. --- ./Makefile    Thu Jul  2 13:00:56 1992
  545. ***************
  546. *** 1,4 ****
  547. ! # @(#) Makefile 1.5 92/06/11 22:21:35
  548.   
  549.   ##############################
  550.   ## Begin configuration options
  551. --- 1,4 ----
  552. ! # @(#) Makefile 1.6 92/07/02 13:00:55
  553.   
  554.   ##############################
  555.   ## Begin configuration options
  556. ***************
  557. *** 113,128 ****
  558.       $(RANLIB) $(LIB)
  559.   
  560.   tcpd:    tcpd.o fromhost.o $(LIB)
  561. !     $(CC) $(CFLAGS) -o $@ tcpd.o fromhost.o $(LIB)
  562.   
  563.   miscd:    miscd.o fromhost.o $(LIB)
  564. !     $(CC) $(CFLAGS) -o $@ miscd.o fromhost.o $(LIB)
  565.   
  566.   try:    try.o $(LIB)
  567. !     $(CC) $(CFLAGS) -o $@ try.o $(LIB)
  568.   
  569.   fromhost: fromhost.c log_tcp.h Makefile $(LIB)
  570. !     $(CC) $(CFLAGS) -DTEST -o fromhost fromhost.c $(LIB)
  571.       rm -f fromhost.o
  572.   
  573.   shar:    
  574. --- 113,128 ----
  575.       $(RANLIB) $(LIB)
  576.   
  577.   tcpd:    tcpd.o fromhost.o $(LIB)
  578. !     $(CC) $(CFLAGS) -o $@ tcpd.o fromhost.o $(LIB) $(LIBS)
  579.   
  580.   miscd:    miscd.o fromhost.o $(LIB)
  581. !     $(CC) $(CFLAGS) -o $@ miscd.o fromhost.o $(LIB) $(LIBS)
  582.   
  583.   try:    try.o $(LIB)
  584. !     $(CC) $(CFLAGS) -o $@ try.o $(LIB) $(LIBS)
  585.   
  586.   fromhost: fromhost.c log_tcp.h Makefile $(LIB)
  587. !     $(CC) $(CFLAGS) -DTEST -o fromhost fromhost.c $(LIB) $(LIBS)
  588.       rm -f fromhost.o
  589.   
  590.   shar:    
  591.  
  592. exit 0 # Just in case...
  593.