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