1/* support functions for ip_pool modules */ 2 3#include <stdio.h> 4#include <string.h> 5#include <stdlib.h> 6#include <ctype.h> 7 8#include <libippool/ip_pool_support.h> 9 10void ip_pool_init(void) 11{ 12} 13 14ip_pool_t ip_pool_get_index(char *name) 15{ 16 FILE *fp; 17 char buf[256]; 18 19 if (isdigit(*name)) 20 return atoi(name); 21 fp = fopen(IPPOOL_CONF, "r"); 22 if (!fp) exit_error(PARAMETER_PROBLEM, 23 "cannot open %s - no pool names", IPPOOL_CONF); 24 while (fgets(buf, sizeof(buf), fp)) { 25 char *p = strtok(buf, " \t\n"); 26 ip_pool_t index; 27 28 if (!p || *p == '#') continue; 29 index = atoi(p); 30 p = strtok(0, " \t\n"); 31 if (p && 0 == strcmp(p, name)) { 32 fclose(fp); 33 return index; 34 } 35 } 36 exit_error(PARAMETER_PROBLEM, 37 "pool '%s' not found in %s\n", name, IPPOOL_CONF); 38} 39 40char *ip_pool_get_name(char *buf, int size, ip_pool_t index, int numeric) 41{ 42 FILE *fp; 43 int ok = 0; 44 45 /* make sure we have enough room, at least for a %d */ 46 if (size < 16) 47 exit_error(PARAMETER_PROBLEM, 48 "ip_pool_support:get_name buf too small (%d vs. 16)\n", 49 size); 50 if (numeric) 51 goto do_numeric; 52 fp = fopen(IPPOOL_CONF, "r"); 53 if (fp) { 54 while (fgets(buf, size, fp)) { 55 char *p = strtok(buf, " \t\n"); 56 57 if (!p || *p == '#') continue; 58 if (index != atoi(p)) continue; 59 p = strtok(0, " \t\n"); 60 if (!p || *p == '#') continue; 61 memmove(buf, p, strlen(p)+1); 62 ok = 1; 63 break; 64 } 65 fclose(fp); 66 } 67 if (!ok) { 68do_numeric: 69 sprintf(buf, "%d", index); 70 } 71 return buf; 72} 73