From e28f24a0c49768114d42cefa33ff79235b937d48 Mon Sep 17 00:00:00 2001 From: victor Date: Fri, 3 Sep 2004 07:16:41 +0000 Subject: domain_name_query is changed to cidr format git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@2176 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- mbbsd/cache.c | 52 ++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 36 insertions(+), 16 deletions(-) (limited to 'mbbsd/cache.c') diff --git a/mbbsd/cache.c b/mbbsd/cache.c index 4c14dda5..4756b359 100644 --- a/mbbsd/cache.c +++ b/mbbsd/cache.c @@ -875,25 +875,45 @@ reload_fcache(void) FILE *fp; SHM->Fbusystate = 1; - bzero(SHM->domain, sizeof(SHM->domain)); - if ((fp = fopen("etc/domain_name_query", "r"))) { - char buf[256], *po; + bzero(SHM->home_ip, sizeof(SHM->home_ip)); + if ((fp = fopen("etc/domain_name_query.cidr", "r"))) { + char buf[256], *ip, *mask; - SHM->top = 0; + SHM->home_num = 0; while (fgets(buf, sizeof(buf), fp)) { - if (buf[0] && buf[0] != '#' && buf[0] != ' ' && - buf[0] != '\n') { - sscanf(buf, "%s", SHM->domain[SHM->top]); // XXX check buffer size - po = buf + strlen(SHM->domain[SHM->top]); - while (*po == ' ' || *po == '\t') - po++; - strncpy(SHM->replace[SHM->top], po, 49); - SHM->replace[SHM->top] - [strlen(SHM->replace[SHM->top]) - 1] = 0; - (SHM->top)++; - if (SHM->top == MAX_FROM) - break; + if (!buf[0] || buf[0] == '#' || buf[0] == ' ' || buf[0] == '\n') + continue; + + if (buf[0] == '@') { + SHM->home_ip[0] = 0; + SHM->home_mask[0] = 0xFFFFFFFF; + SHM->home_num++; + continue; + } + + ip = strtok(buf, " \t"); + if ((mask = strchr(ip, '/')) != NULL) { + int shift = 32 - atoi(mask + 1); + SHM->home_ip[SHM->home_num] = ipstr2int(ip); + SHM->home_mask[SHM->home_num] = (0xFFFFFFFF >> shift ) << shift; + } + else { + SHM->home_ip[SHM->home_num] = ipstr2int(ip); + SHM->home_mask[SHM->home_num] = 0xFFFFFFFF; } + ip = strtok(NULL, " \t"); + if (ip == NULL) { + strncpy(SHM->home_desc[SHM->home_num], "¶³²`¤£ª¾³B", + sizeof(SHM->home_desc[SHM->home_num])); + } + else { + strncpy(SHM->home_desc[SHM->home_num], ip, + sizeof(SHM->home_desc[SHM->home_num])); + SHM->home_desc[SHM->home_num][strlen(SHM->home_desc[SHM->home_num]) - 1] = 0; + } + (SHM->home_num)++; + if (SHM->home_num == MAX_FROM) + break; } fclose(fp); } -- cgit v1.2.3