From: Arran Cudbard-Bell Date: Mon, 21 May 2018 08:17:09 +0000 (+0600) Subject: Fixup fr_pair_cursor calls in rlm_rest and remove pair_make call X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=31d59a03fa17bbd73bd76ec189bf6efdcd1cd894;p=thirdparty%2Ffreeradius-server.git Fixup fr_pair_cursor calls in rlm_rest and remove pair_make call --- diff --git a/src/modules/rlm_rest/rest.c b/src/modules/rlm_rest/rest.c index a2375ae9a0c..63a059f4ace 100644 --- a/src/modules/rlm_rest/rest.c +++ b/src/modules/rlm_rest/rest.c @@ -396,7 +396,7 @@ static size_t rest_encode_post(void *out, size_t size, size_t nmemb, void *userd if (ctx->state == READ_STATE_INIT) ctx->state = READ_STATE_ATTR_BEGIN; while (freespace > 0) { - vp = fr_pair_cursor_current(&ctx->cursor); + vp = fr_cursor_current(&ctx->cursor); if (!vp) { ctx->state = READ_STATE_END; @@ -467,7 +467,7 @@ static size_t rest_encode_post(void *out, size_t size, size_t nmemb, void *userd /* * there are more attributes, insert a separator */ - if (fr_pair_cursor_next(&ctx->cursor)) { + if (fr_cursor_next(&ctx->cursor)) { if (freespace < 1) goto no_space; *p++ = '&'; freespace--; @@ -2028,7 +2028,7 @@ int rest_request_config(rlm_rest_t const *inst, rlm_rest_thread_t *t, rlm_rest_s case HTTP_BODY_POST: rest_request_init(request, &ctx->request); - fr_pair_cursor_init(&(ctx->request.cursor), &request->packet->vps); + fr_cursor_init(&(ctx->request.cursor), &request->packet->vps); if (rest_request_config_body(inst, section, request, handle, rest_encode_post) < 0) { @@ -2057,7 +2057,7 @@ error_header: return -1; } -int rest_response_certinfo(UNUSED rlm_rest_t const *instance, UNUSED rlm_rest_section_t const *section, +int rest_response_certinfo(rlm_rest_t const *inst, UNUSED rlm_rest_section_t const *section, REQUEST *request, void *handle) { rlm_rest_handle_t *randle = handle; @@ -2066,7 +2066,7 @@ int rest_response_certinfo(UNUSED rlm_rest_t const *instance, UNUSED rlm_rest_se int i; char buffer[265]; char *p , *q, *attr = buffer; - vp_cursor_t cursor, list; + fr_cursor_t cursor, list; VALUE_PAIR *cert_vps = NULL; /* @@ -2082,7 +2082,7 @@ int rest_response_certinfo(UNUSED rlm_rest_t const *instance, UNUSED rlm_rest_se } ptr; ptr.to_info = NULL; - fr_pair_cursor_init(&list, &request->packet->vps); + fr_cursor_init(&list, &request->packet->vps); ret = curl_easy_getinfo(candle, CURLINFO_CERTINFO, &ptr.to_info); if (ret != CURLE_OK) { @@ -2098,12 +2098,13 @@ int rest_response_certinfo(UNUSED rlm_rest_t const *instance, UNUSED rlm_rest_se struct curl_slist *cert_attrs; RDEBUG2("Processing certificate %i",i); - fr_pair_cursor_init(&cursor, &cert_vps); + fr_cursor_init(&cursor, &cert_vps); for (cert_attrs = ptr.to_certinfo->certinfo[i]; cert_attrs; cert_attrs = cert_attrs->next) { - VALUE_PAIR *vp; + VALUE_PAIR *vp; + fr_dict_attr_t const *da; q = strchr(cert_attrs->data, ':'); if (!q) { @@ -2112,17 +2113,18 @@ int rest_response_certinfo(UNUSED rlm_rest_t const *instance, UNUSED rlm_rest_se } strlcpy(attr, cert_attrs->data, (q - cert_attrs->data) + 1); - for (p = attr; *p != '\0'; p++) { - if (*p == ' ') *p = '-'; - } + for (p = attr; *p != '\0'; p++) if (*p == ' ') *p = '-'; - vp = fr_pair_make(request->packet, NULL, buffer, q + 1, T_OP_ADD); - if (!vp) { + da = fr_dict_attr_by_name(dict_freeradius, buffer); + if (!da) { RDEBUG3("Skipping %s += '%s'", buffer, q + 1); RDEBUG3("If this value is required, define attribute \"%s\"", buffer); - } else { - fr_pair_cursor_append(&cursor, vp); + continue; } + MEM(vp = fr_pair_afrom_da(request->packet, da)); + fr_pair_value_from_str(vp, q + 1, -1); + + fr_cursor_append(&cursor, vp); } /* @@ -2135,13 +2137,13 @@ int rest_response_certinfo(UNUSED rlm_rest_t const *instance, UNUSED rlm_rest_se * tls_session_pairs_from_x509_cert contains a * reference to cert_vps. */ - cert_vps = fr_pair_cursor_current(&cursor); + cert_vps = fr_cursor_current(&cursor); if (cert_vps) { /* * Print out all the pairs we have so far */ log_request_pair_list(L_DBG_LVL_2, request, cert_vps, NULL); - fr_pair_cursor_merge(&list, cert_vps); + fr_cursor_merge(&list, &cursor); cert_vps = NULL; } } diff --git a/src/modules/rlm_rest/rest.h b/src/modules/rlm_rest/rest.h index 48f2e3ca72d..55b9c4636b0 100644 --- a/src/modules/rlm_rest/rest.h +++ b/src/modules/rlm_rest/rest.h @@ -208,7 +208,7 @@ typedef struct { REQUEST *request; //!< Current request. read_state_t state; //!< Encoder state - vp_cursor_t cursor; //!< Cursor pointing to the start of the list to encode. + fr_cursor_t cursor; //!< Cursor pointing to the start of the list to encode. size_t chunk; //!< Chunk size @@ -265,6 +265,8 @@ typedef struct { rlm_rest_handle_t *handle; //!< curl easy handle servicing our request. } rlm_rest_xlat_rctx_t; +extern fr_dict_t const *dict_freeradius; + extern fr_dict_attr_t const *attr_rest_http_body; extern fr_dict_attr_t const *attr_rest_http_header; extern fr_dict_attr_t const *attr_rest_http_status_code; diff --git a/src/modules/rlm_rest/rlm_rest.c b/src/modules/rlm_rest/rlm_rest.c index 38c797c233e..d2cc7da82f8 100644 --- a/src/modules/rlm_rest/rlm_rest.c +++ b/src/modules/rlm_rest/rlm_rest.c @@ -95,7 +95,7 @@ static const CONF_PARSER module_config[] = { CONF_PARSER_TERMINATOR }; -static fr_dict_t const *dict_freeradius; +fr_dict_t const *dict_freeradius; extern fr_dict_autoload_t rlm_rest_dict[]; fr_dict_autoload_t rlm_rest_dict[] = {