Update of /cvsroot/srvx/services/src
In directory usw-pr-cvs1:/tmp/cvs-serv12931/src
Modified Files:
sockcheck.c
Log Message:
double-check last_touched when queueing an IP for checking
(expire and recheck it if it's too old)
hoist a SOCKCHECK_DEBUG check out of a loop, move a variable decl into the loop
Index: sockcheck.c
===================================================================
RCS file: /cvsroot/srvx/services/src/sockcheck.c,v
retrieving revision 1.78
retrieving revision 1.79
diff -C2 -r1.78 -r1.79
*** sockcheck.c 5 Sep 2002 14:50:18 -0000 1.78
--- sockcheck.c 11 Sep 2002 01:52:46 -0000 1.79
***************
*** 682,704 ****
sockcheck_cache_info sci;
unsigned char buff[17];
if (disable_sockcheck) return;
! snprintf(buff, sizeof(buff), "%ld.%ld.%ld.%ld", (addr >> 0) & 255, (addr >> 8) & 255, (addr >> 16) & 255, (addr >> 24) & 255);
sci = dict_find(checked_ip_dict, buff, NULL);
if (sci) {
! if (sci->decision == REJECT) sockcheck_issue_gline(sci);
! } else {
! int namelen = strlen(buff) + 1;
! sci = calloc(1, sizeof(*sci) + namelen);
! sci->decision = CHECKING;
! sci->last_touched = now;
! sci->reason = NULL;
! sci->addr = addr;
! memcpy(sci->hostname, buff, namelen);
! dict_insert(checked_ip_dict, sci->hostname, sci);
! sci_list_append(&pending_sci_list, sci);
! if (sockcheck_num_clients < sockcheck_conf.max_clients) {
! sockcheck_start_client(sockcheck_num_clients);
}
}
}
--- 682,707 ----
sockcheck_cache_info sci;
unsigned char buff[17];
+ int namelen;
if (disable_sockcheck) return;
! namelen = snprintf(buff, sizeof(buff), "%ld.%ld.%ld.%ld", (addr >> 0) & 255, (addr >> 8) & 255, (addr >> 16) & 255, (addr >> 24) & 255);
sci = dict_find(checked_ip_dict, buff, NULL);
if (sci) {
! if ((sci->last_touched + sockcheck_conf.max_cache_age) >= now) {
! if (sci->decision == REJECT) sockcheck_issue_gline(sci);
! return;
}
+ dict_remove(checked_ip_dict, sci->hostname);
+ }
+ sci = calloc(1, sizeof(*sci) + namelen);
+ sci->decision = CHECKING;
+ sci->last_touched = now;
+ sci->reason = NULL;
+ sci->addr = addr;
+ memcpy(sci->hostname, buff, namelen);
+ dict_insert(checked_ip_dict, sci->hostname, sci);
+ sci_list_append(&pending_sci_list, sci);
+ if (sockcheck_num_clients < sockcheck_conf.max_clients) {
+ sockcheck_start_client(sockcheck_num_clients);
}
}
***************
*** 926,946 ****
sockcheck_cache_info sci;
unsigned int nn;
- struct string_buffer sb;
(void)data;
! if (SOCKCHECK_DEBUG) string_buffer_init(&sb);
! /* Remember which clients we're still checking; we're not allowed to remove them. */
! for (curr_clients = dict_new(), nn=0; nn < sockcheck_conf.max_clients; nn++) {
! if (!client_list[nn]) continue;
! dict_insert(curr_clients, client_list[nn]->addr->hostname, client_list[nn]);
! if (SOCKCHECK_DEBUG) {
string_buffer_append(&sb, ' ');
string_buffer_append_string(&sb, client_list[nn]->addr->hostname);
}
- }
- if (SOCKCHECK_DEBUG) {
string_buffer_append(&sb, '\0');
log(PC_LOG, LOG_INFO, "Cleaning sockcheck cache at "FMT_TIME_T"; current clients: %s\n", now, sb.list);
string_buffer_clean(&sb);
}
--- 929,952 ----
sockcheck_cache_info sci;
unsigned int nn;
(void)data;
! if (SOCKCHECK_DEBUG) {
! struct string_buffer sb;
! string_buffer_init(&sb);
! /* Remember which clients we're still checking; we're not allowed to remove them. */
! for (curr_clients = dict_new(), nn=0; nn < sockcheck_conf.max_clients; nn++) {
! if (!client_list[nn]) continue;
! dict_insert(curr_clients, client_list[nn]->addr->hostname, client_list[nn]);
string_buffer_append(&sb, ' ');
string_buffer_append_string(&sb, client_list[nn]->addr->hostname);
}
string_buffer_append(&sb, '\0');
log(PC_LOG, LOG_INFO, "Cleaning sockcheck cache at "FMT_TIME_T"; current clients: %s\n", now, sb.list);
string_buffer_clean(&sb);
+ } else {
+ for (curr_clients = dict_new(), nn=0; nn < sockcheck_conf.max_clients; nn++) {
+ if (!client_list[nn]) continue;
+ dict_insert(curr_clients, client_list[nn]->addr->hostname, client_list[nn]);
+ }
}
|