X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Frlm_ippool%2Frlm_ippool.c;h=6d811ea82849e956ff0a2dd387ea30b2ea9fa2d7;hb=a02920abd3a1de14f041ad2ed49539892dd8d912;hp=a7a4baab662f77458b6eaec624625a0d67d9439f;hpb=5f3e8b84cd5dc5a7959c5c395d1d7a1e0c1415c0;p=freeradius.git diff --git a/src/modules/rlm_ippool/rlm_ippool.c b/src/modules/rlm_ippool/rlm_ippool.c index a7a4baa..6d811ea 100644 --- a/src/modules/rlm_ippool/rlm_ippool.c +++ b/src/modules/rlm_ippool/rlm_ippool.c @@ -170,10 +170,8 @@ static int ippool_instantiate(CONF_SECTION *conf, void **instance) ippool_key key; datum key_datum; datum data_datum; - int i; - unsigned j; const char *cli = "0"; - char *pool_name = NULL; + const char *pool_name = NULL; /* * Set up a storage area for instance data @@ -241,6 +239,7 @@ static int ippool_instantiate(CONF_SECTION *conf, void **instance) * active = 0 */ int rcode; + uint32_t i, j; uint32_t or_result; char str[32]; char init_str[17]; @@ -280,9 +279,9 @@ static int ippool_instantiate(CONF_SECTION *conf, void **instance) if (rcode < 0) { radlog(L_ERR, "rlm_ippool: Failed storing data to %s: %s", data->session_db, gdbm_strerror(gdbm_errno)); - free(data); gdbm_close(data->gdbm); gdbm_close(data->ip); + free(data); return -1; } } @@ -320,41 +319,41 @@ static int ippool_accounting(void *instance, REQUEST *request) int num = 0; VALUE_PAIR *vp; char str[32]; - char key_str[17]; + uint8_t key_str[17]; char hex_str[35]; char xlat_str[MAX_STRING_LEN]; - MD5_CTX md5_context; + FR_MD5_CTX md5_context; - if ((vp = pairfind(request->packet->vps, PW_ACCT_STATUS_TYPE)) != NULL) + if ((vp = pairfind(request->packet->vps, PW_ACCT_STATUS_TYPE, 0)) != NULL) acctstatustype = vp->vp_integer; else { - DEBUG("rlm_ippool: Could not find account status type in packet. Return NOOP."); + RDEBUG("Could not find account status type in packet. Return NOOP."); return RLM_MODULE_NOOP; } switch(acctstatustype){ case PW_STATUS_STOP: if (!radius_xlat(xlat_str,MAX_STRING_LEN,data->key, request, NULL)){ - DEBUG("rlm_ippool: xlat on the 'key' directive failed"); + RDEBUG("xlat on the 'key' directive failed"); return RLM_MODULE_NOOP; } - MD5Init(&md5_context); - MD5Update(&md5_context, xlat_str, strlen(xlat_str)); - MD5Final(key_str, &md5_context); - key_str[17] = '\0'; - lrad_bin2hex(key_str,hex_str,16); + fr_MD5Init(&md5_context); + fr_MD5Update(&md5_context, xlat_str, strlen(xlat_str)); + fr_MD5Final(key_str, &md5_context); + key_str[16] = '\0'; + fr_bin2hex(key_str,hex_str,16); hex_str[32] = '\0'; - DEBUG("rlm_ippool: MD5 on 'key' directive maps to: %s",hex_str); + RDEBUG("MD5 on 'key' directive maps to: %s",hex_str); memcpy(key.key,key_str,16); break; default: /* We don't care about any other accounting packet */ - DEBUG("rlm_ippool: This is not an Accounting-Stop. Return NOOP."); + RDEBUG("This is not an Accounting-Stop. Return NOOP."); return RLM_MODULE_NOOP; } - DEBUG("rlm_ippool: Searching for an entry for key: '%s'",xlat_str); + RDEBUG("Searching for an entry for key: '%s'",xlat_str); key_datum.dptr = (char *) &key; key_datum.dsize = sizeof(ippool_key); @@ -367,7 +366,7 @@ static int ippool_accounting(void *instance, REQUEST *request) */ memcpy(&entry, data_datum.dptr, sizeof(ippool_info)); free(data_datum.dptr); - DEBUG("rlm_ippool: Deallocated entry for ip: %s",ip_ntoa(str,entry.ipaddr)); + RDEBUG("Deallocated entry for ip: %s",ip_ntoa(str,entry.ipaddr)); entry.active = 0; entry.timestamp = 0; entry.timeout = 0; @@ -400,7 +399,7 @@ static int ippool_accounting(void *instance, REQUEST *request) free(data_datum.dptr); if (num >0){ num--; - DEBUG("rlm_ippool: num: %d",num); + RDEBUG("num: %d",num); data_datum.dptr = (char *) # data_datum.dsize = sizeof(int); rcode = gdbm_store(data->ip, key_datum, data_datum, GDBM_REPLACE); @@ -424,7 +423,7 @@ static int ippool_accounting(void *instance, REQUEST *request) } else{ pthread_mutex_unlock(&data->op_mutex); - DEBUG("rlm_ippool: Entry not found"); + RDEBUG("Entry not found"); } return RLM_MODULE_OK; @@ -448,10 +447,10 @@ static int ippool_postauth(void *instance, REQUEST *request) VALUE_PAIR *vp; char *cli = NULL; char str[32]; - char key_str[17]; + uint8_t key_str[17]; char hex_str[35]; char xlat_str[MAX_STRING_LEN]; - MD5_CTX md5_context; + FR_MD5_CTX md5_context; /* quiet the compiler */ @@ -461,11 +460,11 @@ static int ippool_postauth(void *instance, REQUEST *request) /* Check if Pool-Name attribute exists. If it exists check our name and * run only if they match */ - if ((vp = pairfind(request->config_items, PW_POOL_NAME)) != NULL){ + if ((vp = pairfind(request->config_items, PW_POOL_NAME, 0)) != NULL){ if (data->name == NULL || (strcmp(data->name,vp->vp_strvalue) && strcmp(vp->vp_strvalue,"DEFAULT"))) return RLM_MODULE_NOOP; } else { - DEBUG("rlm_ippool: Could not find Pool-Name attribute."); + RDEBUG("Could not find Pool-Name attribute."); return RLM_MODULE_NOOP; } @@ -473,24 +472,24 @@ static int ippool_postauth(void *instance, REQUEST *request) /* * Find the caller id */ - if ((vp = pairfind(request->packet->vps, PW_CALLING_STATION_ID)) != NULL) + if ((vp = pairfind(request->packet->vps, PW_CALLING_STATION_ID, 0)) != NULL) cli = vp->vp_strvalue; if (!radius_xlat(xlat_str,MAX_STRING_LEN,data->key, request, NULL)){ - DEBUG("rlm_ippool: xlat on the 'key' directive failed"); + RDEBUG("xlat on the 'key' directive failed"); return RLM_MODULE_NOOP; } - MD5Init(&md5_context); - MD5Update(&md5_context, xlat_str, strlen(xlat_str)); - MD5Final(key_str, &md5_context); - key_str[17] = '\0'; - lrad_bin2hex(key_str,hex_str,16); + fr_MD5Init(&md5_context); + fr_MD5Update(&md5_context, xlat_str, strlen(xlat_str)); + fr_MD5Final(key_str, &md5_context); + key_str[16] = '\0'; + fr_bin2hex(key_str,hex_str,16); hex_str[32] = '\0'; - DEBUG("rlm_ippool: MD5 on 'key' directive maps to: %s",hex_str); + RDEBUG("MD5 on 'key' directive maps to: %s",hex_str); memcpy(key.key,key_str,16); - DEBUG("rlm_ippool: Searching for an entry for key: '%s'",hex_str); + RDEBUG("Searching for an entry for key: '%s'",hex_str); key_datum.dptr = (char *) &key; key_datum.dsize = sizeof(ippool_key); @@ -505,7 +504,7 @@ static int ippool_postauth(void *instance, REQUEST *request) memcpy(&entry, data_datum.dptr, sizeof(ippool_info)); free(data_datum.dptr); if (entry.active){ - DEBUG("rlm_ippool: Found a stale entry for ip: %s",ip_ntoa(str,entry.ipaddr)); + RDEBUG("Found a stale entry for ip: %s",ip_ntoa(str,entry.ipaddr)); entry.active = 0; entry.timestamp = 0; entry.timeout = 0; @@ -536,7 +535,7 @@ static int ippool_postauth(void *instance, REQUEST *request) free(data_datum.dptr); if (num >0){ num--; - DEBUG("rlm_ippool: num: %d",num); + RDEBUG("num: %d",num); data_datum.dptr = (char *) # data_datum.dsize = sizeof(int); rcode = gdbm_store(data->ip, key_datum, data_datum, GDBM_REPLACE); @@ -564,16 +563,16 @@ static int ippool_postauth(void *instance, REQUEST *request) /* * If there is a Framed-IP-Address attribute in the reply, check for override */ - if (pairfind(request->reply->vps, PW_FRAMED_IP_ADDRESS) != NULL) { - DEBUG("rlm_ippool: Found Framed-IP-Address attribute in reply attribute list."); + if (pairfind(request->reply->vps, PW_FRAMED_IP_ADDRESS, 0) != NULL) { + RDEBUG("Found Framed-IP-Address attribute in reply attribute list."); if (data->override) { /* Override supplied Framed-IP-Address */ - DEBUG("rlm_ippool: override is set to yes. Override the existing Framed-IP-Address attribute."); - pairdelete(&request->reply->vps, PW_FRAMED_IP_ADDRESS); + RDEBUG("override is set to yes. Override the existing Framed-IP-Address attribute."); + pairdelete(&request->reply->vps, PW_FRAMED_IP_ADDRESS, 0); } else { /* Abort */ - DEBUG("rlm_ippool: override is set to no. Return NOOP."); + RDEBUG("override is set to no. Return NOOP."); return RLM_MODULE_NOOP; } } @@ -730,7 +729,7 @@ static int ippool_postauth(void *instance, REQUEST *request) free(key_datum.dptr); entry.active = 1; entry.timestamp = request->timestamp; - if ((vp = pairfind(request->reply->vps, PW_SESSION_TIMEOUT)) != NULL) + if ((vp = pairfind(request->reply->vps, PW_SESSION_TIMEOUT, 0)) != NULL) entry.timeout = (time_t) vp->vp_integer; else entry.timeout = 0; @@ -761,7 +760,7 @@ static int ippool_postauth(void *instance, REQUEST *request) } else num = 0; num++; - DEBUG("rlm_ippool: num: %d",num); + RDEBUG("num: %d",num); data_datum.dptr = (char *) # data_datum.dsize = sizeof(int); rcode = gdbm_store(data->ip, key_datum, data_datum, GDBM_REPLACE); @@ -774,18 +773,18 @@ static int ippool_postauth(void *instance, REQUEST *request) pthread_mutex_unlock(&data->op_mutex); - DEBUG("rlm_ippool: Allocated ip %s to client key: %s",ip_ntoa(str,entry.ipaddr),hex_str); + RDEBUG("Allocated ip %s to client key: %s",ip_ntoa(str,entry.ipaddr),hex_str); vp = radius_paircreate(request, &request->reply->vps, - PW_FRAMED_IP_ADDRESS, PW_TYPE_IPADDR); + PW_FRAMED_IP_ADDRESS, 0, PW_TYPE_IPADDR); vp->vp_ipaddr = entry.ipaddr; /* * If there is no Framed-Netmask attribute in the * reply, add one */ - if (pairfind(request->reply->vps, PW_FRAMED_IP_NETMASK) == NULL) { + if (pairfind(request->reply->vps, PW_FRAMED_IP_NETMASK, 0) == NULL) { vp = radius_paircreate(request, &request->reply->vps, - PW_FRAMED_IP_NETMASK, + PW_FRAMED_IP_NETMASK, 0, PW_TYPE_IPADDR); vp->vp_ipaddr = ntohl(data->netmask); } @@ -793,7 +792,7 @@ static int ippool_postauth(void *instance, REQUEST *request) } else{ pthread_mutex_unlock(&data->op_mutex); - DEBUG("rlm_ippool: No available ip addresses in pool."); + RDEBUG("No available ip addresses in pool."); return RLM_MODULE_NOTFOUND; }