#endif
/* for paircompare_register */
-typedef int (*RAD_COMPARE_FUNC)(void *instance, VALUE_PAIR *, VALUE_PAIR *, VALUE_PAIR *, VALUE_PAIR **);
+typedef int (*RAD_COMPARE_FUNC)(void *instance, REQUEST *,VALUE_PAIR *, VALUE_PAIR *, VALUE_PAIR *, VALUE_PAIR **);
typedef enum radlog_dest_t {
RADLOG_FILES = 0,
RAD_COMPARE_FUNC func,
void *instance);
void paircompare_unregister(int attr, RAD_COMPARE_FUNC func);
-int paircmp(VALUE_PAIR *request, VALUE_PAIR *check,
+int paircmp(REQUEST *req, VALUE_PAIR *request, VALUE_PAIR *check,
VALUE_PAIR **reply);
-int simplepaircmp(VALUE_PAIR *, VALUE_PAIR *);
+int simplepaircmp(REQUEST *, VALUE_PAIR *, VALUE_PAIR *);
void pair_builtincompare_init(void);
/* xlat.c */
/*
* Compare 2 attributes. May call the attribute compare function.
*/
-static int paircompare(VALUE_PAIR *request, VALUE_PAIR *check,
+static int paircompare(REQUEST *req, VALUE_PAIR *request, VALUE_PAIR *check,
VALUE_PAIR *check_pairs, VALUE_PAIR **reply_pairs)
{
int ret = -2;
*/
for (c = cmp; c; c = c->next)
if (c->attribute == check->attribute)
- return (c->compare)(c->instance, request, check,
+ return (c->compare)(c->instance, req, request, check,
check_pairs, reply_pairs);
switch(check->type) {
*
* Return 0 on match.
*/
-int paircmp(VALUE_PAIR *request, VALUE_PAIR *check, VALUE_PAIR **reply)
+int paircmp(REQUEST *req, VALUE_PAIR *request, VALUE_PAIR *check, VALUE_PAIR **reply)
{
VALUE_PAIR *check_item = check;
VALUE_PAIR *auth_item;
/*
* OK it is present now compare them.
*/
- compare = paircompare(auth_item, check_item, check, reply);
+ compare = paircompare(req, auth_item, check_item, check, reply);
switch (check_item->operator) {
case T_OP_EQ:
* Compare two attributes simply. Calls paircompare.
*/
-int simplepaircmp(VALUE_PAIR *first, VALUE_PAIR *second)
+int simplepaircmp(REQUEST *req, VALUE_PAIR *first, VALUE_PAIR *second)
{
- return paircompare( first, second, NULL, NULL );
+ return paircompare( req, first, second, NULL, NULL );
}
/*
* Compare a Connect-Info and a Connect-Rate
*/
-static int connectcmp(void *instance, VALUE_PAIR *request, VALUE_PAIR *check,
+static int connectcmp(void *instance, REQUEST *req, VALUE_PAIR *request, VALUE_PAIR *check,
VALUE_PAIR *check_pairs, VALUE_PAIR **reply_pairs)
{
int rate;
/*
* Compare a portno with a range.
*/
-static int portcmp(void *instance, VALUE_PAIR *request, VALUE_PAIR *check,
+static int portcmp(void *instance, REQUEST *req, VALUE_PAIR *request, VALUE_PAIR *check,
VALUE_PAIR *check_pairs, VALUE_PAIR **reply_pairs)
{
char buf[MAX_STRING_LEN];
* - if PW_STRIP_USER_NAME is not present in check_pairs,
* add a PW_STRIPPED_USER_NAME to the request.
*/
-static int presufcmp(void *instance, VALUE_PAIR *request, VALUE_PAIR *check,
+static int presufcmp(void *instance, REQUEST *req, VALUE_PAIR *request, VALUE_PAIR *check,
VALUE_PAIR *check_pairs, VALUE_PAIR **reply_pairs)
{
VALUE_PAIR *vp;
* do the comparison against when the packet came in, not now,
* and have one less system call to do.
*/
-static int timecmp(void *instance, VALUE_PAIR *request, VALUE_PAIR *check,
+static int timecmp(void *instance, REQUEST *req, VALUE_PAIR *request, VALUE_PAIR *check,
VALUE_PAIR *check_pairs, VALUE_PAIR **reply_pairs)
{
instance = instance;
* doing the lookup only ONCE, and storing the result
* in check->lvalue...
*/
-static int attrcmp(void *instance, VALUE_PAIR *request, VALUE_PAIR *check,
+static int attrcmp(void *instance, REQUEST *req, VALUE_PAIR *request, VALUE_PAIR *check,
VALUE_PAIR *check_pairs, VALUE_PAIR **reply_pairs)
{
VALUE_PAIR *pair;
/*
* Compare the expiration date.
*/
-static int expirecmp(void *instance, VALUE_PAIR *request, VALUE_PAIR *check,
+static int expirecmp(void *instance, REQUEST *req, VALUE_PAIR *request, VALUE_PAIR *check,
VALUE_PAIR *check_pairs, VALUE_PAIR **reply_pairs)
{
time_t now;
if(reply_item != (VALUE_PAIR *)NULL) {
- compare = simplepaircmp(reply_item, check_item);
+ compare = simplepaircmp(request, reply_item, check_item);
/* DEBUG2(" attr_filter: compare = %d", compare); */
/*
* See if the counter matches.
*/
-static int counter_cmp(void *instance, VALUE_PAIR *request, VALUE_PAIR *check,
+static int counter_cmp(void *instance, REQUEST *req, VALUE_PAIR *request, VALUE_PAIR *check,
VALUE_PAIR *check_pairs, VALUE_PAIR **reply_pairs)
{
rlm_counter_t *data = (rlm_counter_t *) instance;
if ( parse_state == SMP_PATTERN ) { /* pattern line found */
DEBUG2("process pattern");
/* check pattern against request */
- if ( paircmp(request, vp, reply ) == 0 ) {
+ if ( paircmp(NULL, request, vp, reply ) == 0 ) {
DEBUG2("rlm_dbm: Pattern matched, look for request");
pairmove(&tmp_config, &vp);
pairfree(&vp);
*/
while((cur) && (!userfound)) {
if((strcmp(cur->name, username)==0) &&
- paircmp(request->packet->vps, cur->check, &request->reply->vps) == 0) {
+ paircmp(request, request->packet->vps, cur->check, &request->reply->vps) == 0) {
/*
* Usercollide means we have to compare check pairs
* AND the password
curdefault = inst->defaults;
while(curdefault) {
- if(paircmp(request->packet->vps, curdefault->check,
+ if(paircmp(request, request->packet->vps, curdefault->check,
&request->reply->vps) == 0) {
DEBUG2(" fastusers: Matched %s at %d",
curdefault->name, curdefault->lineno);
if (strcmp(name, pl->name) && strcmp(pl->name, "DEFAULT"))
continue;
- if (paircmp(request_pairs, pl->check, &reply_pairs) == 0) {
+ if (paircmp(request, request_pairs, pl->check, &reply_pairs) == 0) {
DEBUG2(" acct_users: Matched %s at %d",
pl->name, pl->lineno);
found = 1;
* check pairs, then add the reply pairs from the
* entry to the current list of reply pairs.
*/
- if ((paircmp(request_pairs, pl->check, reply_pairs) == 0)) {
+ if ((paircmp(request, request_pairs, pl->check, reply_pairs) == 0)) {
if((mainconfig.do_usercollide) && (strcmp(pl->name, "DEFAULT"))) {
if (strcmp(name, pl->name) && strcmp(pl->name, "DEFAULT"))
continue;
- if (paircmp(request_pairs, pl->check, reply_pairs) == 0) {
+ if (paircmp(request, request_pairs, pl->check, reply_pairs) == 0) {
DEBUG2(" acct_users: Matched %s at %d",
pl->name, pl->lineno);
found = 1;
tmp = check_item->next;
check_item->next = NULL;
- result = paircmp(request, check_item, NULL);
+ result = paircmp(NULL, request, check_item, NULL);
check_item->next = tmp;
check_item = check_item->next;
* See if the huntgroup matches. This function is
* tied to the "Huntgroup" keyword.
*/
-static int huntgroup_cmp(void *instance, VALUE_PAIR *request, VALUE_PAIR *check,
+static int huntgroup_cmp(void *instance, REQUEST *req, VALUE_PAIR *request, VALUE_PAIR *check,
VALUE_PAIR *check_pairs, VALUE_PAIR **reply_pairs)
{
PAIR_LIST *i;
for (i = data->huntgroups; i; i = i->next) {
if (strcmp(i->name, huntgroup) != 0)
continue;
- if (paircmp(request, i->check, NULL) == 0) {
+ if (paircmp(req, request, i->check, NULL) == 0) {
DEBUG2(" huntgroups: Matched %s at %d",
i->name, i->lineno);
break;
/*
* See if this entry matches.
*/
- if (paircmp(request_pairs, i->check, NULL) != 0)
+ if (paircmp(NULL, request_pairs, i->check, NULL) != 0)
continue;
/*
#if 0 /* FIXME: this is the *real* authorizing */
vp_printlist(stderr, check_tmp);
#endif
- if (paircmp(request->packet->vps, check_tmp, &reply_tmp) != 0) {
+ if (paircmp(request, request->packet->vps, check_tmp, &reply_tmp) != 0) {
radlog(L_INFO, "rlm_sql: Pairs do not match [%s]", sqlusername);
return RLM_MODULE_NOTFOUND;
}
/*
* The Group = handler.
*/
-static int groupcmp(void *instance, VALUE_PAIR *request, VALUE_PAIR *check,
+static int groupcmp(void *instance, REQUEST *req, VALUE_PAIR *request, VALUE_PAIR *check,
VALUE_PAIR *check_pairs, VALUE_PAIR **reply_pairs)
{
struct passwd *pwd;