home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume31 / log_tcp / patch02 next >
Encoding:
Text File  |  1992-09-11  |  19.8 KB  |  607 lines

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