Home | History | Annotate | Line # | Download | only in libwrap
misc.c revision 1.1
      1  1.1  mrg  /*
      2  1.1  mrg   * Misc routines that are used by tcpd and by tcpdchk.
      3  1.1  mrg   *
      4  1.1  mrg   * Author: Wietse Venema, Eindhoven University of Technology, The Netherlands.
      5  1.1  mrg   */
      6  1.1  mrg 
      7  1.1  mrg #ifndef lint
      8  1.1  mrg static char sccsic[] = "@(#) misc.c 1.2 96/02/11 17:01:29";
      9  1.1  mrg #endif
     10  1.1  mrg 
     11  1.1  mrg #include <sys/types.h>
     12  1.1  mrg #include <sys/param.h>
     13  1.1  mrg #include <netinet/in.h>
     14  1.1  mrg #include <arpa/inet.h>
     15  1.1  mrg #include <stdio.h>
     16  1.1  mrg #include <string.h>
     17  1.1  mrg 
     18  1.1  mrg #include "tcpd.h"
     19  1.1  mrg 
     20  1.1  mrg extern char *fgets();
     21  1.1  mrg 
     22  1.1  mrg #ifndef	INADDR_NONE
     23  1.1  mrg #define	INADDR_NONE	(-1)		/* XXX should be 0xffffffff */
     24  1.1  mrg #endif
     25  1.1  mrg 
     26  1.1  mrg /* xgets - fgets() with backslash-newline stripping */
     27  1.1  mrg 
     28  1.1  mrg char   *xgets(ptr, len, fp)
     29  1.1  mrg char   *ptr;
     30  1.1  mrg int     len;
     31  1.1  mrg FILE   *fp;
     32  1.1  mrg {
     33  1.1  mrg     int     got;
     34  1.1  mrg     char   *start = ptr;
     35  1.1  mrg 
     36  1.1  mrg     while (fgets(ptr, len, fp)) {
     37  1.1  mrg 	got = strlen(ptr);
     38  1.1  mrg 	if (got >= 1 && ptr[got - 1] == '\n') {
     39  1.1  mrg 	    tcpd_context.line++;
     40  1.1  mrg 	    if (got >= 2 && ptr[got - 2] == '\\') {
     41  1.1  mrg 		got -= 2;
     42  1.1  mrg 	    } else {
     43  1.1  mrg 		return (start);
     44  1.1  mrg 	    }
     45  1.1  mrg 	}
     46  1.1  mrg 	ptr += got;
     47  1.1  mrg 	len -= got;
     48  1.1  mrg 	ptr[0] = 0;
     49  1.1  mrg     }
     50  1.1  mrg     return (ptr > start ? start : 0);
     51  1.1  mrg }
     52  1.1  mrg 
     53  1.1  mrg /* split_at - break string at delimiter or return NULL */
     54  1.1  mrg 
     55  1.1  mrg char   *split_at(string, delimiter)
     56  1.1  mrg char   *string;
     57  1.1  mrg int     delimiter;
     58  1.1  mrg {
     59  1.1  mrg     char   *cp;
     60  1.1  mrg 
     61  1.1  mrg     if ((cp = strchr(string, delimiter)) != 0)
     62  1.1  mrg 	*cp++ = 0;
     63  1.1  mrg     return (cp);
     64  1.1  mrg }
     65  1.1  mrg 
     66  1.1  mrg /* dot_quad_addr - convert dotted quad to internal form */
     67  1.1  mrg 
     68  1.1  mrg unsigned long dot_quad_addr(str)
     69  1.1  mrg char   *str;
     70  1.1  mrg {
     71  1.1  mrg     int     in_run = 0;
     72  1.1  mrg     int     runs = 0;
     73  1.1  mrg     char   *cp = str;
     74  1.1  mrg 
     75  1.1  mrg     /* Count the number of runs of non-dot characters. */
     76  1.1  mrg 
     77  1.1  mrg     while (*cp) {
     78  1.1  mrg 	if (*cp == '.') {
     79  1.1  mrg 	    in_run = 0;
     80  1.1  mrg 	} else if (in_run == 0) {
     81  1.1  mrg 	    in_run = 1;
     82  1.1  mrg 	    runs++;
     83  1.1  mrg 	}
     84  1.1  mrg 	cp++;
     85  1.1  mrg     }
     86  1.1  mrg     return (runs == 4 ? inet_addr(str) : INADDR_NONE);
     87  1.1  mrg }
     88