summaryrefslogtreecommitdiffstats
path: root/mbbsd
diff options
context:
space:
mode:
authorvictor <victor@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2004-09-03 15:16:41 +0800
committervictor <victor@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2004-09-03 15:16:41 +0800
commite28f24a0c49768114d42cefa33ff79235b937d48 (patch)
tree64debb3969bccc0e35a0486651eed5dc141903a9 /mbbsd
parent478ea9614468014b20f9c5d500f7b802c10f9f78 (diff)
downloadpttbbs-e28f24a0c49768114d42cefa33ff79235b937d48.tar
pttbbs-e28f24a0c49768114d42cefa33ff79235b937d48.tar.gz
pttbbs-e28f24a0c49768114d42cefa33ff79235b937d48.tar.bz2
pttbbs-e28f24a0c49768114d42cefa33ff79235b937d48.tar.lz
pttbbs-e28f24a0c49768114d42cefa33ff79235b937d48.tar.xz
pttbbs-e28f24a0c49768114d42cefa33ff79235b937d48.tar.zst
pttbbs-e28f24a0c49768114d42cefa33ff79235b937d48.zip
domain_name_query is changed to cidr format
git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@2176 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
Diffstat (limited to 'mbbsd')
-rw-r--r--mbbsd/cache.c52
-rw-r--r--mbbsd/mbbsd.c23
-rw-r--r--mbbsd/stuff.c20
-rw-r--r--mbbsd/talk.c10
4 files changed, 67 insertions, 38 deletions
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");