X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Frlm_counter%2Frlm_counter.c;h=d5ed5d25791ec0c5076a24f05728c550d5ce6e5e;hb=9d6f24b3fe0128e63747be0f0b0ce58cb98504cf;hp=2a523b61e834cc35dd515a0d11b121805e9d2b1b;hpb=e53aafcbb1ca88f3b646e90fe279ffd1cfa0964d;p=freeradius.git diff --git a/src/modules/rlm_counter/rlm_counter.c b/src/modules/rlm_counter/rlm_counter.c index 2a523b6..d5ed5d2 100644 --- a/src/modules/rlm_counter/rlm_counter.c +++ b/src/modules/rlm_counter/rlm_counter.c @@ -25,16 +25,12 @@ #include RCSID("$Id$") -#include "config.h" -#include +#include +#include -#include -#include -#include #include -#include -#include +#include "config.h" #include @@ -149,7 +145,7 @@ static int counter_cmp(void *instance, /* * Find the key attribute. */ - key_vp = pairfind(request, data->key_attr); + key_vp = pairfind(request, data->key_attr, 0); if (key_vp == NULL) { return RLM_MODULE_NOOP; } @@ -165,7 +161,7 @@ static int counter_cmp(void *instance, memcpy(&counter, count_datum.dptr, sizeof(rad_counter)); free(count_datum.dptr); - return counter.user_counter - check->lvalue; + return counter.user_counter - check->vp_integer; } @@ -405,7 +401,7 @@ static int counter_instantiate(CONF_SECTION *conf, void **instance) } data->reply_attr = dattr->attr; } - + /* * Create a new attribute for the counter. @@ -417,7 +413,7 @@ static int counter_instantiate(CONF_SECTION *conf, void **instance) } memset(&flags, 0, sizeof(flags)); - dict_addattr(data->counter_name, 0, PW_TYPE_INTEGER, -1, flags); + dict_addattr(data->counter_name, -1, 0, PW_TYPE_INTEGER, flags); dattr = dict_attrbyname(data->counter_name); if (dattr == NULL) { radlog(L_ERR, "rlm_counter: Failed to create counter attribute %s", @@ -451,7 +447,7 @@ static int counter_instantiate(CONF_SECTION *conf, void **instance) * Find the attribute for the allowed protocol */ if (data->service_type != NULL) { - if ((dval = dict_valbyname(PW_SERVICE_TYPE, data->service_type)) == NULL) { + if ((dval = dict_valbyname(PW_SERVICE_TYPE, 0, data->service_type)) == NULL) { radlog(L_ERR, "rlm_counter: Failed to find attribute number for %s", data->service_type); counter_detach(data); @@ -576,8 +572,8 @@ static int counter_accounting(void *instance, REQUEST *request) int acctstatustype = 0; time_t diff; - if ((key_vp = pairfind(request->packet->vps, PW_ACCT_STATUS_TYPE)) != NULL) - acctstatustype = key_vp->lvalue; + if ((key_vp = pairfind(request->packet->vps, PW_ACCT_STATUS_TYPE, 0)) != NULL) + acctstatustype = key_vp->vp_integer; else { DEBUG("rlm_counter: Could not find account status type in packet."); return RLM_MODULE_NOOP; @@ -586,7 +582,7 @@ static int counter_accounting(void *instance, REQUEST *request) DEBUG("rlm_counter: We only run on Accounting-Stop packets."); return RLM_MODULE_NOOP; } - uniqueid_vp = pairfind(request->packet->vps, PW_ACCT_UNIQUE_SESSION_ID); + uniqueid_vp = pairfind(request->packet->vps, PW_ACCT_UNIQUE_SESSION_ID, 0); if (uniqueid_vp != NULL) DEBUG("rlm_counter: Packet Unique ID = '%s'",uniqueid_vp->vp_strvalue); @@ -610,11 +606,11 @@ static int counter_accounting(void *instance, REQUEST *request) * Check if we need to watch out for a specific service-type. If yes then check it */ if (data->service_type != NULL) { - if ((proto_vp = pairfind(request->packet->vps, PW_SERVICE_TYPE)) == NULL){ + if ((proto_vp = pairfind(request->packet->vps, PW_SERVICE_TYPE, 0)) == NULL){ DEBUG("rlm_counter: Could not find Service-Type attribute in the request. Returning NOOP."); return RLM_MODULE_NOOP; } - if ((unsigned)proto_vp->lvalue != data->service_val){ + if ((unsigned)proto_vp->vp_integer != data->service_val){ DEBUG("rlm_counter: This Service-Type is not allowed. Returning NOOP."); return RLM_MODULE_NOOP; } @@ -623,10 +619,10 @@ static int counter_accounting(void *instance, REQUEST *request) * Check if request->timestamp - {Acct-Delay-Time} < last_reset * If yes reject the packet since it is very old */ - key_vp = pairfind(request->packet->vps, PW_ACCT_DELAY_TIME); + key_vp = pairfind(request->packet->vps, PW_ACCT_DELAY_TIME, 0); if (key_vp != NULL){ - if (key_vp->lvalue != 0 && - (request->timestamp - key_vp->lvalue) < data->last_reset){ + if (key_vp->vp_integer != 0 && + (request->timestamp - key_vp->vp_integer) < data->last_reset){ DEBUG("rlm_counter: This packet is too old. Returning NOOP."); return RLM_MODULE_NOOP; } @@ -638,7 +634,7 @@ static int counter_accounting(void *instance, REQUEST *request) * Look for the key. User-Name is special. It means * The REAL username, after stripping. */ - key_vp = (data->key_attr == PW_USER_NAME) ? request->username : pairfind(request->packet->vps, data->key_attr); + key_vp = (data->key_attr == PW_USER_NAME) ? request->username : pairfind(request->packet->vps, data->key_attr, 0); if (key_vp == NULL){ DEBUG("rlm_counter: Could not find the key-attribute in the request. Returning NOOP."); return RLM_MODULE_NOOP; @@ -647,7 +643,7 @@ static int counter_accounting(void *instance, REQUEST *request) /* * Look for the attribute to use as a counter. */ - count_vp = pairfind(request->packet->vps, data->count_attr); + count_vp = pairfind(request->packet->vps, data->count_attr, 0); if (count_vp == NULL){ DEBUG("rlm_counter: Could not find the count-attribute in the request."); return RLM_MODULE_NOOP; @@ -699,14 +695,14 @@ static int counter_accounting(void *instance, REQUEST *request) * day). That is the right thing */ diff = request->timestamp - data->last_reset; - counter.user_counter += (count_vp->lvalue < diff) ? count_vp->lvalue : diff; + counter.user_counter += (count_vp->vp_integer < diff) ? count_vp->vp_integer : diff; } else if (count_vp->type == PW_TYPE_INTEGER) { /* * Integers get counted, without worrying about * reset dates. */ - counter.user_counter += count_vp->lvalue; + counter.user_counter += count_vp->vp_integer; } else { /* @@ -778,7 +774,7 @@ static int counter_authorize(void *instance, REQUEST *request) * The REAL username, after stripping. */ DEBUG2("rlm_counter: Entering module authorize code"); - key_vp = (data->key_attr == PW_USER_NAME) ? request->username : pairfind(request->packet->vps, data->key_attr); + key_vp = (data->key_attr == PW_USER_NAME) ? request->username : pairfind(request->packet->vps, data->key_attr, 0); if (key_vp == NULL) { DEBUG2("rlm_counter: Could not find Key value pair"); return ret; @@ -787,7 +783,7 @@ static int counter_authorize(void *instance, REQUEST *request) /* * Look for the check item */ - if ((check_vp= pairfind(request->config_items, data->check_attr)) == NULL) { + if ((check_vp= pairfind(request->config_items, data->check_attr, 0)) == NULL) { DEBUG2("rlm_counter: Could not find Check item value pair"); return ret; } @@ -817,8 +813,8 @@ static int counter_authorize(void *instance, REQUEST *request) /* * Check if check item > counter */ - DEBUG("rlm_counter: Check item = %d, Count = %d",check_vp->lvalue,counter.user_counter); - res=check_vp->lvalue - counter.user_counter; + DEBUG("rlm_counter: Check item = %d, Count = %d",check_vp->vp_integer,counter.user_counter); + res=check_vp->vp_integer - counter.user_counter; if (res > 0) { DEBUG("rlm_counter: res is greater than zero"); if (data->count_attr == PW_ACCT_SESSION_TIME) { @@ -849,33 +845,25 @@ static int counter_authorize(void *instance, REQUEST *request) if (data->reset_time && ( res >= (data->reset_time - request->timestamp))) { res = data->reset_time - request->timestamp; - res += check_vp->lvalue; + res += check_vp->vp_integer; } - if ((reply_item = pairfind(request->reply->vps, PW_SESSION_TIMEOUT)) != NULL) { - if (reply_item->lvalue > res) - reply_item->lvalue = res; + if ((reply_item = pairfind(request->reply->vps, PW_SESSION_TIMEOUT, 0)) != NULL) { + if (reply_item->vp_integer > res) + reply_item->vp_integer = res; } else { - if ((reply_item = paircreate(PW_SESSION_TIMEOUT, PW_TYPE_INTEGER)) == NULL) { - radlog(L_ERR|L_CONS, "no memory"); - return RLM_MODULE_NOOP; - } - reply_item->lvalue = res; - pairadd(&request->reply->vps, reply_item); + reply_item = radius_paircreate(request, &request->reply->vps, PW_SESSION_TIMEOUT, 0, PW_TYPE_INTEGER); + reply_item->vp_integer = res; } } else if (data->reply_attr) { - if ((reply_item = pairfind(request->reply->vps, data->reply_attr)) != NULL) { - if (reply_item->lvalue > res) - reply_item->lvalue = res; + if ((reply_item = pairfind(request->reply->vps, data->reply_attr, 0)) != NULL) { + if (reply_item->vp_integer > res) + reply_item->vp_integer = res; } else { - if ((reply_item = paircreate(data->reply_attr, PW_TYPE_INTEGER)) == NULL) { - radlog(L_ERR|L_CONS, "no memory"); - return RLM_MODULE_NOOP; - } - reply_item->lvalue = res; - pairadd(&request->reply->vps, reply_item); + reply_item = radius_paircreate(request, &request->reply->vps, data->reply_attr, 0, PW_TYPE_INTEGER); + reply_item->vp_integer = res; } } @@ -883,7 +871,7 @@ static int counter_authorize(void *instance, REQUEST *request) DEBUG2("rlm_counter: (Check item - counter) is greater than zero"); DEBUG2("rlm_counter: Authorized user %s, check_item=%d, counter=%d", - key_vp->vp_strvalue,check_vp->lvalue,counter.user_counter); + key_vp->vp_strvalue,check_vp->vp_integer,counter.user_counter); DEBUG2("rlm_counter: Sent Reply-Item for user %s, Type=Session-Timeout, value=%d", key_vp->vp_strvalue,res); } @@ -905,7 +893,7 @@ static int counter_authorize(void *instance, REQUEST *request) ret=RLM_MODULE_REJECT; DEBUG2("rlm_counter: Rejected user %s, check_item=%d, counter=%d", - key_vp->vp_strvalue,check_vp->lvalue,counter.user_counter); + key_vp->vp_strvalue,check_vp->vp_integer,counter.user_counter); } return ret;