From 50ecd970cdc023bf630e386e7de9ca25ba2acf71 Mon Sep 17 00:00:00 2001 From: kkalev Date: Fri, 11 Oct 2002 13:26:20 +0000 Subject: [PATCH] Do a memset(0) on the key.nas before doing searches. Nusty bug --- src/modules/rlm_ippool/rlm_ippool.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/modules/rlm_ippool/rlm_ippool.c b/src/modules/rlm_ippool/rlm_ippool.c index fa4057c..7a562eb 100644 --- a/src/modules/rlm_ippool/rlm_ippool.c +++ b/src/modules/rlm_ippool/rlm_ippool.c @@ -32,6 +32,8 @@ * - Move from authorize to post-auth * - Use mutex locks when accessing the gdbm files * - Fail if we don't find nas port information + * Oct 2002, Kostas Kalevras + * - Do a memset(0) on the key.nas before doing searches. Nusty bug */ #include "config.h" @@ -311,8 +313,10 @@ static int ippool_accounting(void *instance, REQUEST *request) return RLM_MODULE_NOOP; } - strncpy(key.nas,nas,MAX_NAS_NAME_SIZE - 1); + memset(key.nas,0,MAX_NAS_NAME_SIZE); + strncpy(key.nas,nas,MAX_NAS_NAME_SIZE -1 ); key.port = port; + DEBUG("rlm_ippool: Searching for an entry for nas/port: %s/%d",key.nas,key.port); key_datum.dptr = (ippool_key *) &key; key_datum.dsize = sizeof(ippool_key); @@ -324,7 +328,7 @@ static int ippool_accounting(void *instance, REQUEST *request) /* * If the entry was found set active to zero */ - memcpy(&entry, data_datum.dptr, sizeof(int)); + memcpy(&entry, data_datum.dptr, sizeof(ippool_info)); free(data_datum.dptr); DEBUG("rlm_ippool: Deallocated entry for ip/port: %s/%d",ip_ntoa(str,entry.ipaddr),port); entry.active = 0; @@ -368,6 +372,8 @@ static int ippool_accounting(void *instance, REQUEST *request) } } } + else + DEBUG("rlm_ippool: Entry not found"); return RLM_MODULE_OK; } @@ -437,9 +443,10 @@ static int ippool_postauth(void *instance, REQUEST *request) return RLM_MODULE_NOOP; } + memset(key.nas,0,MAX_NAS_NAME_SIZE); strncpy(key.nas,nas,MAX_NAS_NAME_SIZE -1 ); key.port = port; - DEBUG("rlm_ippool: Searching for an entry for nas/port: %s/%d",nas,port); + DEBUG("rlm_ippool: Searching for an entry for nas/port: %s/%d",key.nas,key.port); key_datum.dptr = (ippool_key *) &key; key_datum.dsize = sizeof(ippool_key); @@ -576,11 +583,13 @@ static int ippool_postauth(void *instance, REQUEST *request) pthread_mutex_unlock(&data->session_mutex); } free(key_datum.dptr); + memset(key.nas,0,MAX_NAS_NAME_SIZE); strncpy(key.nas,nas,MAX_NAS_NAME_SIZE - 1); key.port = port; key_datum.dptr = (ippool_key *) &key; key_datum.dsize = sizeof(ippool_key); + DEBUG2("rlm_ippool: Allocating ip to nas/port: %s/%d",key.nas,key.port); pthread_mutex_lock(&data->session_mutex); rcode = gdbm_store(data->gdbm, key_datum, data_datum, GDBM_REPLACE); pthread_mutex_unlock(&data->session_mutex); -- 2.1.4