我正在编写一个apache模块,我在这里有一个函数,它接受一个IP地址(在myip中定义)并检查apache表(定义为iplist)以查看IP地址是否存在。
这是我用来让apache从httpd.conf文件加载我的行的代码,将它们添加到IP地址列表中:
const char *exempt_ip(cmd_parms *cmd,void *cfg,const char *arg){
dir_config *conf=(dir_config*)cfg;
if (conf){
char ip[7]="XXXXXXX";
snprintf(ip,sizeof(ip),"IP%i",config.numIPs);
apr_table_set(conf->iplist,ip,arg);
config.numIPs++;
}
return NULL;
}
这就是导致服务器有时甚至在只有4个键和4个值的表上响应缓慢的代码,但它确实有效:
const int ip_matched(apr_table_t* iplist,const char* myip){
const char* v;char ip[7]="XXXXXXX";int ret=0;
int ic;
for (ic=1;ic<config.numIPs;ic++){
snprintf(ip,sizeof(ip),"IP%i",ic);
v=apr_table_get(iplist,ip);
if (strcmp(v,myip)==0){
ret=1;
ic=config.numIPs+1;
}
}
return ret;
}
也许我可以使用更快的原生C函数?有人有任何想法吗?
答案 0 :(得分:2)
在两个职能中,
char ip[7]="XXXXXXX";
拥有7个字符,但没有终结符,它们应该是
char ip[8]="XXXXXXX";
或
char ip[]="XXXXXXX";
但我知道这不是一个合适的答案。