/* support functions for ip_pool modules */ #include #include #include #include #include void ip_pool_init(void) { } ip_pool_t ip_pool_get_index(char *name) { FILE *fp; char buf[256]; if (isdigit(*name)) return atoi(name); fp = fopen(IPPOOL_CONF, "r"); if (!fp) exit_error(PARAMETER_PROBLEM, "cannot open %s - no pool names", IPPOOL_CONF); while (fgets(buf, sizeof(buf), fp)) { char *p = strtok(buf, " \t\n"); ip_pool_t index; if (!p || *p == '#') continue; index = atoi(p); p = strtok(0, " \t\n"); if (p && 0 == strcmp(p, name)) { fclose(fp); return index; } } exit_error(PARAMETER_PROBLEM, "pool '%s' not found in %s\n", name, IPPOOL_CONF); } char *ip_pool_get_name(char *buf, int size, ip_pool_t index, int numeric) { FILE *fp; int ok = 0; /* make sure we have enough room, at least for a %d */ if (size < 16) exit_error(PARAMETER_PROBLEM, "ip_pool_support:get_name buf too small (%d vs. 16)\n", size); if (numeric) goto do_numeric; fp = fopen(IPPOOL_CONF, "r"); if (fp) { while (fgets(buf, size, fp)) { char *p = strtok(buf, " \t\n"); if (!p || *p == '#') continue; if (index != atoi(p)) continue; p = strtok(0, " \t\n"); if (!p || *p == '#') continue; memmove(buf, p, strlen(p)+1); ok = 1; break; } fclose(fp); } if (!ok) { do_numeric: sprintf(buf, "%d", index); } return buf; }