Add support for the Rewrite-Rule attribute in rlm_attr_rewrite
authorkkalev <kkalev>
Wed, 14 Aug 2002 14:31:39 +0000 (14:31 +0000)
committerkkalev <kkalev>
Wed, 14 Aug 2002 14:31:39 +0000 (14:31 +0000)
raddb/dictionary
share/dictionary
src/include/radius.h
src/modules/rlm_attr_rewrite/rlm_attr_rewrite.c

index 7f132d8..39b10ea 100644 (file)
@@ -194,6 +194,7 @@ ATTRIBUTE   Ldap-Group              1074    string
 ATTRIBUTE      Module-Success-Message  1075    string
 ATTRIBUTE      Module-Failure-Message  1076    string
 #              X99-Fast                1077    integer
+ATTRIBUTE      Rewrite-Rule            1078    string
 
 #
 #      Non-Protocol Attributes
index 7f132d8..39b10ea 100644 (file)
@@ -194,6 +194,7 @@ ATTRIBUTE   Ldap-Group              1074    string
 ATTRIBUTE      Module-Success-Message  1075    string
 ATTRIBUTE      Module-Failure-Message  1076    string
 #              X99-Fast                1077    integer
+ATTRIBUTE      Rewrite-Rule            1078    string
 
 #
 #      Non-Protocol Attributes
index 05f975c..3d0e955 100644 (file)
 #define PW_MODULE_SUCCESS_MESSAGE      1075
 #define PW_MODULE_FAILURE_MESSAGE      1076
 #define PW_X99_FAST                    1077
+#define PW_REWRITE_RULE                        1078
 
 /*
  *     Integer Translations
index 6355b69..6196c4a 100644 (file)
@@ -52,6 +52,7 @@ typedef struct rlm_attr_rewrite_t {
        char *replace;          /* The replacement */
        int  nocase;            /* Ignore case */
        int  num_matches;       /* Maximum number of matches */
+       char *name;             /* The module name */
 } rlm_attr_rewrite_t;
 
 
@@ -70,6 +71,7 @@ static int attr_rewrite_instantiate(CONF_SECTION *conf, void **instance)
 {
        rlm_attr_rewrite_t *data;
        DICT_ATTR *dattr;
+       char *instance_name = NULL;
        
        /*
         *      Set up a storage area for instance data
@@ -125,6 +127,12 @@ static int attr_rewrite_instantiate(CONF_SECTION *conf, void **instance)
                return -1;
        }
        data->attr_num = dattr->attr;
+       /* Add the module instance name */
+       data->name = NULL;
+       instance_name = cf_section_name2(conf);
+       if (instance_name != NULL)
+               data->name = strdup(instance_name);
+       
        
        *instance = data;
        
@@ -150,6 +158,11 @@ static int do_attr_rewrite(void *instance, REQUEST *request)
        char replace_STR[MAX_STRING_LEN];
        int replace_len = 0;
 
+       if ((attr_vp = pairfind(request->config_items, PW_REWRITE_RULE)) != NULL){
+               if (data->name == NULL || strcmp(data->name,attr_vp->strvalue))
+                       return RLM_MODULE_NOOP;
+       }
+
        switch (data->searchin) {
                case RLM_REGEX_INPACKET:
                        if (data->attr_num == PW_USER_NAME)
@@ -294,6 +307,8 @@ static int attr_rewrite_detach(void *instance)
        free(data->attribute);
        free(data->search);
        free(data->replace);
+       if (data->name)
+               free(data->name);
 
        free(instance);
        return 0;