ipfloadfile.c (1491B)
1 /************************************************************************* 2 * This file is part of Crosroads 1.23, a load balancer and fail over 3 * utility for TCP. Copyright (c) Karel Kubat, distributed under GPL. 4 * Visit http://crossroads.e-tunity.com for information. 5 *************************************************************************/ 6 #include "crossroads.h" 7 8 int ipf_loadfile (char const *fname, IpFilter **chain, int *nchain) { 9 FILE *f; 10 char buf[80]; 11 int nloaded = 0, ret = 0; 12 IpFilter filter; 13 14 /* No file? No update. */ 15 if (!fname || !*fname) 16 return (0); 17 18 msg ("Service %s: loading IP filter file: '%s'", 19 activeservice->name, fname); 20 21 if (! (f = fopen (fname, "r")) ) { 22 warning ("Service %s: can't read filter file '%s': %s", 23 activeservice->name, fname, strerror(errno)); 24 return (0); 25 } 26 27 free (*chain); 28 *chain = 0; 29 *nchain = 0; 30 31 while (1) { 32 if (fscanf (f, " %79s ", buf) < 1) 33 break; 34 if (ipf_parse (buf, &filter)) { 35 warning ("Service %s: bad ip filter in file '%s'", 36 activeservice->name, fname); 37 ret++; 38 } else { 39 msg ("Service %s: got ip filter specifier '%s'", 40 activeservice->name, buf); 41 *chain = xrealloc (*chain, (*nchain + 1) * sizeof(IpFilter)); 42 (*chain)[*nchain] = filter; 43 (*nchain)++; 44 nloaded++; 45 } 46 } 47 48 msg ("Service %s: loaded IP filter file '%s': %d successfully loaded", 49 activeservice->name, fname, nloaded); 50 51 fclose (f); 52 return (ret); 53 }