Change paircmp,paircompare,simplapaircmp and RAD_COMPARE_FUNC to allow for
authorkkalev <kkalev>
Fri, 9 Nov 2001 00:53:09 +0000 (00:53 +0000)
committerkkalev <kkalev>
Fri, 9 Nov 2001 00:53:09 +0000 (00:53 +0000)
the use of radius_xlat() in paircompare functions

src/include/radiusd.h
src/main/valuepair.c
src/modules/rlm_attr_filter/rlm_attr_filter.c
src/modules/rlm_counter/rlm_counter.c
src/modules/rlm_dbm/rlm_dbm.c
src/modules/rlm_fastusers/rlm_fastusers.c
src/modules/rlm_files/rlm_files.c
src/modules/rlm_preprocess/rlm_preprocess.c
src/modules/rlm_sql/rlm_sql.c
src/modules/rlm_unix/rlm_unix.c

index b28c01d..0232976 100644 (file)
@@ -157,7 +157,7 @@ typedef struct main_config_t {
 #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,
@@ -287,9 +287,9 @@ int         paircompare_register(int attr, int otherattr,
                                     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 */
index 4a5a02e..ed64102 100644 (file)
@@ -63,7 +63,7 @@ static struct cmp *cmp;
 /*
  *     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;
@@ -82,7 +82,7 @@ static int paircompare(VALUE_PAIR *request, VALUE_PAIR *check,
         */
        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) {
@@ -199,7 +199,7 @@ void paircompare_unregister(int attr, RAD_COMPARE_FUNC fun)
  *
  *     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;
@@ -267,7 +267,7 @@ int paircmp(VALUE_PAIR *request, VALUE_PAIR *check, VALUE_PAIR **reply)
                /*
                 *      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:
@@ -330,16 +330,16 @@ int paircmp(VALUE_PAIR *request, VALUE_PAIR *check, VALUE_PAIR **reply)
  *      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;
@@ -356,7 +356,7 @@ static int connectcmp(void *instance, VALUE_PAIR *request, VALUE_PAIR *check,
 /*
  *     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];
@@ -402,7 +402,7 @@ static int portcmp(void *instance, VALUE_PAIR *request, VALUE_PAIR *check,
  *     - 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;
@@ -472,7 +472,7 @@ static int presufcmp(void *instance, VALUE_PAIR *request, VALUE_PAIR *check,
  *     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;
@@ -495,7 +495,7 @@ static int timecmp(void *instance, VALUE_PAIR *request, VALUE_PAIR *check,
  *     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;
@@ -531,7 +531,7 @@ static int attrcmp(void *instance, VALUE_PAIR *request, VALUE_PAIR *check,
 /*
  *     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;
index 915ae25..4e4f9fc 100644 (file)
@@ -322,7 +322,7 @@ static int attr_filter_authorize(void *instance, REQUEST *request)
 
                    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); */
 
index 72c8bac..046669e 100644 (file)
@@ -96,7 +96,7 @@ static CONF_PARSER module_config[] = {
 /*
  *     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;
index 9445d7f..791e206 100644 (file)
@@ -199,7 +199,7 @@ static int sm_parse_user(DBM *pdb, const char * username, VALUE_PAIR const* requ
                                        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);
index c97bed8..0aa2eaa 100644 (file)
@@ -416,7 +416,7 @@ static PAIR_LIST *fastuser_find(REQUEST *request, PAIR_LIST *user,
         */
        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
@@ -634,7 +634,7 @@ static int fastuser_authorize(void *instance, REQUEST *request)
                        
        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);
@@ -744,7 +744,7 @@ static int fastuser_preacct(void *instance, REQUEST *request)
                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;
index 18e733b..4bf885e 100644 (file)
@@ -295,7 +295,7 @@ static int file_authorize(void *instance, REQUEST *request)
                 *      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"))) {
 
@@ -408,7 +408,7 @@ static int file_preacct(void *instance, REQUEST *request)
                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;
index 359b58e..1f34d12 100644 (file)
@@ -228,7 +228,7 @@ static int hunt_paircmp(VALUE_PAIR *request, VALUE_PAIR *check)
                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;
@@ -437,7 +437,7 @@ static int hints_setup(PAIR_LIST *hints, REQUEST *request)
  *     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;
@@ -452,7 +452,7 @@ static int huntgroup_cmp(void *instance, VALUE_PAIR *request, VALUE_PAIR *check,
        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;
@@ -489,7 +489,7 @@ static int huntgroup_access(PAIR_LIST *huntgroups, VALUE_PAIR *request_pairs)
                /*
                 *      See if this entry matches.
                 */
-               if (paircmp(request_pairs, i->check, NULL) != 0)
+               if (paircmp(NULL, request_pairs, i->check, NULL) != 0)
                        continue;
 
                /*
index 2888ca5..e02be5d 100644 (file)
@@ -276,7 +276,7 @@ static int rlm_sql_authorize(void *instance, REQUEST * request) {
 #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;
        }
index 8fab231..3f290d5 100644 (file)
@@ -195,7 +195,7 @@ static shadow_pwd_t *fgetspnam(const char *fname, const char *name) {
 /*
  *     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;