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 ++++++++++++++++++++++++++++++++++++---------------- mbbsd/mbbsd.c | 23 ++++++----------------- mbbsd/stuff.c | 20 ++++++++++++++++++++ mbbsd/talk.c | 10 +++++----- 4 files changed, 67 insertions(+), 38 deletions(-) (limited to 'mbbsd') 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); } diff --git a/mbbsd/mbbsd.c b/mbbsd/mbbsd.c index 7736d92d..eb935696 100644 --- a/mbbsd/mbbsd.c +++ b/mbbsd/mbbsd.c @@ -689,25 +689,14 @@ del_distinct(char *fname, char *line) static int where(char *from) { - register int i = 0, count = 0, j; - - for (j = 0; j < SHM->top; j++) { - char *token = strtok(SHM->domain[j], "&"); - - i = 0; - count = 0; - while (token) { - if (strstr(from, token)) - count++; - token = strtok(NULL, "&"); - i++; + int i; + + for (i = 0; i < SHM->home_num; i++) { + if ((SHM->home_ip[i] & SHM->home_mask[i]) == (ipstr2int(from) & SHM->home_mask[i])) { + return i; } - if (i == count) - break; } - if (i != count) - return 0; - return j; + return 0; } #endif diff --git a/mbbsd/stuff.c b/mbbsd/stuff.c index 8d70566d..d35be51b 100644 --- a/mbbsd/stuff.c +++ b/mbbsd/stuff.c @@ -317,6 +317,26 @@ belong(char *filelist, char *key) return rc; } +unsigned int +ipstr2int(char *ip) +{ + unsigned int i, val = 0; + char buf[32]; + char *nil, *p; + strcpy(buf, ip); + p = buf; + for (i = 0; i < 4; i++) { + nil = strchr(p, '.'); + if (nil != NULL) + *nil = 0; + val *= 256; + val += atoi(p); + if (nil != NULL) + p = nil + 1; + } + return val; +} + #ifndef _BBS_UTIL_C_ /* getdata_buf */ time_t gettime(int line, time_t dt, char*head) diff --git a/mbbsd/talk.c b/mbbsd/talk.c index b0c22f4c..20b6a6ac 100644 --- a/mbbsd/talk.c +++ b/mbbsd/talk.c @@ -1614,7 +1614,7 @@ descript(int show_mode, userinfo_t * uentp, time_t diff) return (((uentp->pager != 2 && uentp->pager != 3 && diff) || HAS_PERM(PERM_SYSOP)) ? #ifdef WHERE - uentp->from_alias ? SHM->replace[uentp->from_alias] : + uentp->from_alias ? SHM->home_desc[uentp->from_alias] : uentp->from #else uentp->from @@ -2980,14 +2980,14 @@ AngelNotOnline(){ outs("\nÍ¢¯d¨¥µ¹§A¡G\n"); outs("\033[1;31;44m¡ó¢s¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢t\033[37m" "¤p¤Ñ¨Ï¯d¨¥\033[31m¢u¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢s¡ó\033[m\n"); - outs("\033[1;31mùú¢t\033[32m ¤p¤Ñ¨Ï " - " \033[31m¢uùû\033[m\n"); + outs("\033[1;31m¢~¢t\033[32m ¤p¤Ñ¨Ï " + " \033[31m¢u¢¡\033[m\n"); while (fgets(buf, sizeof(buf), fp)) { buf[strlen(buf) - 1] = 0; prints("\033[1;31m¢x\033[m%-74.74s\033[1;31m¢x\033[m\n", buf); } - outs("\033[1;31mùü¢s¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w" - "¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢sùý\033[m\n"); + outs("\033[1;31m¢¢¢s¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w" + "¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢s¢£\033[m\n"); outs("\033[1;31;44m¡ó¢r¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w" "¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢w¢r¡ó\033[m\n"); -- cgit v1.2.3