]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Autoload rlm_securid attrs
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Tue, 22 May 2018 10:41:10 +0000 (16:41 +0600)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Tue, 22 May 2018 10:41:10 +0000 (16:41 +0600)
src/modules/rlm_securid/mem.c
src/modules/rlm_securid/rlm_securid.c
src/modules/rlm_securid/rlm_securid.h

index 937a3a1ecfb35bc4e73bd3efd4d88337e03eaeb3..bd7821fdeb5d9675ccbdfebca0693a2b448c5636 100644 (file)
@@ -124,9 +124,7 @@ int securid_sessionlist_add(rlm_securid_t *inst,REQUEST *request, SECURID_SESSIO
         *      Generate State, since we've been asked to add it to
         *      the list.
         */
-       state = fr_pair_make(request->reply, &request->reply->vps, "State", NULL, T_OP_EQ);
-       if (!state) return -1;
-
+       MEM(pair_update_reply(&state, attr_state) >= 0);
        fr_pair_value_memcpy(state, session->state, sizeof(session->state));
 
        status = rbtree_insert(inst->session_tree, session);
@@ -185,7 +183,7 @@ SECURID_SESSION *securid_sessionlist_find(rlm_securid_t *inst, REQUEST *request)
        /*
         *      We key the sessions off of the 'state' attribute
         */
-       state = fr_pair_find_by_num(request->packet->vps, 0, FR_STATE, TAG_ANY);
+       state = fr_pair_find_by_da(request->packet->vps, attr_state, TAG_ANY);
        if (!state) {
                return NULL;
        }
index 04628c99397049bef2581882cb444b46e4673a04..9e6a0724398c8cc7030802949d885ab9f1bc1d90 100644 (file)
@@ -49,6 +49,27 @@ static const CONF_PARSER module_config[] = {
        CONF_PARSER_TERMINATOR
 };
 
+static fr_dict_t const *dict_radius;
+
+extern fr_dict_autoload_t mem_dict[];
+fr_dict_autoload_t mem_dict[] = {
+       { .out = &dict_radius, .proto = "radius" },
+       { NULL }
+};
+
+fr_dict_attr_t const *attr_prompt;
+fr_dict_attr_t const *attr_reply_message;
+fr_dict_attr_t const *attr_state;
+fr_dict_attr_t const *attr_user_password;
+
+extern fr_dict_attr_autoload_t mem_dict_attr[];
+fr_dict_attr_autoload_t mem_dict_attr[] = {
+       { .out = &attr_prompt, .name = "Prompt", .type = FR_TYPE_UINT32, .dict = &dict_radius },
+       { .out = &attr_reply_message, .name = "Reply-Message", .type = FR_TYPE_STRING, .dict = &dict_radius },
+       { .out = &attr_state, .name = "State", .type = FR_TYPE_OCTETS, .dict = &dict_radius },
+       { .out = &attr_user_password, .name = "User-Password", .type = FR_TYPE_STRING, .dict = &dict_radius },
+       { NULL }
+};
 
 static SD_CHAR empty_pin[] = "";
 
@@ -444,11 +465,11 @@ static int mod_instantiate(void *instance, UNUSED CONF_SECTION *conf)
  */
 static rlm_rcode_t CC_HINT(nonnull) mod_authenticate(void *instance, UNUSED void *thread, REQUEST *request)
 {
-       int rcode;
-       rlm_securid_t const *inst = instance;
-       char  buffer[FR_MAX_STRING_LEN]="";
-       char const *username=NULL, *password=NULL;
-       VALUE_PAIR *vp;
+       int             rcode;
+       rlm_securid_t   const *inst = instance;
+       char             buffer[FR_MAX_STRING_LEN]="";
+       char const      *username=NULL, *password=NULL;
+       VALUE_PAIR      *vp;
 
        /*
         *      We can only authenticate user requests which HAVE
@@ -467,7 +488,7 @@ static rlm_rcode_t CC_HINT(nonnull) mod_authenticate(void *instance, UNUSED void
        /*
         *      Clear-text passwords are the only ones we support.
         */
-       if (request->password->da->attr != FR_USER_PASSWORD) {
+       if (request->password->da != attr_user_password) {
                REDEBUG("Attribute \"User-Password\" is required for authentication. Cannot use \"%s\"",
                        request->password->da->name);
                return RLM_MODULE_INVALID;
@@ -505,11 +526,8 @@ static rlm_rcode_t CC_HINT(nonnull) mod_authenticate(void *instance, UNUSED void
                /* reply with Access-challenge message code (11) */
 
                /* Generate Prompt attribute */
-               vp = fr_pair_afrom_num(request->reply, 0, FR_PROMPT);
-
-               rad_assert(vp != NULL);
+               MEM(pair_update_reply(&vp, attr_prompt) >= 0);
                vp->vp_uint32 = 0; /* no echo */
-               fr_pair_add(&request->reply->vps, vp);
 
                /* Mark the packet as a Acceess-Challenge Packet */
                request->reply->code = FR_CODE_ACCESS_CHALLENGE;
@@ -525,8 +543,10 @@ static rlm_rcode_t CC_HINT(nonnull) mod_authenticate(void *instance, UNUSED void
                break;
        }
 
-       if (*buffer) pair_make_reply("Reply-Message", buffer, T_OP_EQ);
-
+       if (*buffer) {
+               MEM(pair_update_reply(&vp, attr_reply_message) >= 0);
+               fr_pair_value_strcpy(vp, buffer);
+       }
        return rcode;
 }
 
index 542bc1f25c49e4b32dc314b8508303b0681d37d1..6a2a2d873365da9fd57c440e43ae970d803f332b 100644 (file)
@@ -76,6 +76,11 @@ typedef struct rlm_securid_t {
        uint32_t        max_trips_per_session;
 } rlm_securid_t;
 
+extern fr_dict_attr_t const *attr_prompt;
+extern fr_dict_attr_t const *attr_reply_message;
+extern fr_dict_attr_t const *attr_state;
+extern fr_dict_attr_t const *attr_user_password;
+
 /* Memory Management */
 SECURID_SESSION*     securid_session_alloc(void);
 void                securid_session_free(rlm_securid_t *inst, REQUEST *request,SECURID_SESSION *session)