]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Add fr_value_box_alloc_null
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Fri, 26 Jan 2018 20:40:20 +0000 (13:40 -0700)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Fri, 26 Jan 2018 23:26:53 +0000 (16:26 -0700)
To allocate null value boxes which are then populated with another function in the value.c API.

This means you don't have to pass the taint/enumv flags in twice (which looked stupid).

src/include/value.h
src/main/map.c
src/main/xlat_eval.c
src/main/xlat_func.c
src/modules/rlm_rest/rlm_rest.c

index 38f9c35bcf176ac41220425d53159526b571bf08..0b5359cac99844e1d44aef70d97a19feca5556b4 100644 (file)
@@ -260,6 +260,23 @@ static inline fr_value_box_t *fr_value_box_alloc(TALLOC_CTX *ctx, fr_type_t type
        return value;
 }
 
+/** Allocate a value box for later use with a value assignment function
+ *
+ * @param[in] ctx      to allocate the value_box in.
+ * @return
+ *     - A new fr_value_box_t.
+ *     - NULL on error.
+ */
+static inline fr_value_box_t *fr_value_box_alloc_null(TALLOC_CTX *ctx)
+{
+       fr_value_box_t *value;
+
+       value = talloc_zero(ctx, fr_value_box_t);
+       value->type = FR_TYPE_INVALID;
+
+       return value;
+}
+
 /** Box an ethernet value (6 bytes, network byte order)
  *
  * @param[in] dst      Where to copy the ethernet address to.
index 95e98b083cde3ab27b2f8cefba23abea490b3369..6f47be6763b2d63b0df2750fa2e1534e9d54f98c 100644 (file)
@@ -1089,7 +1089,7 @@ int map_to_list_mod(TALLOC_CTX *ctx, vp_list_mod_t **out,
                                n = map_list_mod_afrom_map(ctx, map_in, map);
                                if (!n) goto error;
 
-                               n_vb = fr_value_box_alloc(n->mod->rhs, FR_TYPE_STRING, NULL, false);
+                               n_vb = fr_value_box_alloc_null(n->mod->rhs);
                                if (!n_vb) goto error;
 
                                if (fr_value_box_strdup(n_vb, n_vb, NULL, "", false) < 0) goto error;
index 81bb0c0c7e301e33614bb595c6a28de356582e34..29ee0e3788919a1fb17d95b06a7d7e7052862c2f 100644 (file)
@@ -68,7 +68,7 @@ static xlat_action_t xlat_eval_one_letter(TALLOC_CTX *ctx, fr_cursor_t *out, REQ
 
        switch (letter) {
        case '%':
-               MEM(value = fr_value_box_alloc(ctx, FR_TYPE_STRING, NULL, false));
+               MEM(value = fr_value_box_alloc_null(ctx));
                if (fr_value_box_strdup(value, value, NULL, "%", false) < 0) return XLAT_ACTION_FAIL;
                break;
 
@@ -91,7 +91,7 @@ static xlat_action_t xlat_eval_one_letter(TALLOC_CTX *ctx, fr_cursor_t *out, REQ
                }
                strftime(buffer, sizeof(buffer), "%d", &ts);
 
-               MEM(value = fr_value_box_alloc(ctx, FR_TYPE_STRING, NULL, false));
+               MEM(value = fr_value_box_alloc_null(ctx));
                if (fr_value_box_strdup(value, value, NULL, buffer, false) < 0) return XLAT_ACTION_FAIL;
                break;
 
@@ -132,7 +132,7 @@ static xlat_action_t xlat_eval_one_letter(TALLOC_CTX *ctx, fr_cursor_t *out, REQ
                p = strchr(buffer, '\n');
                if (p) *p = '\0';
 
-               MEM(value = fr_value_box_alloc(ctx, FR_TYPE_STRING, NULL, false));
+               MEM(value = fr_value_box_alloc_null(ctx));
                if (fr_value_box_strdup(value, value, NULL, buffer, false) < 0) goto error;
        }
                break;
@@ -151,7 +151,7 @@ static xlat_action_t xlat_eval_one_letter(TALLOC_CTX *ctx, fr_cursor_t *out, REQ
                if (!localtime_r(&when, &ts)) goto error;
                strftime(buffer, sizeof(buffer), "%Y%m%d", &ts);
 
-               MEM(value = fr_value_box_alloc(ctx, FR_TYPE_STRING, NULL, false));
+               MEM(value = fr_value_box_alloc_null(ctx));
                if (fr_value_box_strdup(value, value, NULL, buffer, false) < 0) goto error;
                break;
 
@@ -183,7 +183,7 @@ static xlat_action_t xlat_eval_one_letter(TALLOC_CTX *ctx, fr_cursor_t *out, REQ
                if (!localtime_r(&when, &ts)) goto error;
                strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", &ts);
 
-               MEM(value = fr_value_box_alloc(ctx, FR_TYPE_STRING, NULL, false));
+               MEM(value = fr_value_box_alloc_null(ctx));
                if (fr_value_box_strdup(value, value, NULL, buffer, false) < 0) goto error;
                break;
 
@@ -191,7 +191,7 @@ static xlat_action_t xlat_eval_one_letter(TALLOC_CTX *ctx, fr_cursor_t *out, REQ
                if (!localtime_r(&when, &ts)) goto error;
                strftime(buffer, sizeof(buffer), "%Y-%m-%d-%H.%M.%S.000000", &ts);
 
-               MEM(value = fr_value_box_alloc(ctx, FR_TYPE_STRING, NULL, false));
+               MEM(value = fr_value_box_alloc_null(ctx));
                if (fr_value_box_strdup(value, value, NULL, buffer, false) < 0) goto error;
                break;
 
@@ -612,7 +612,7 @@ xlat_action_t xlat_frame_eval_repeat(TALLOC_CTX *ctx, fr_cursor_t *out,
                         *      Fixup talloc lineage and assign the
                         *      output of the function to a box.
                         */
-                       MEM(value = fr_value_box_alloc(ctx, FR_TYPE_STRING, NULL, false));
+                       MEM(value = fr_value_box_alloc_null(ctx));
                        fr_value_box_strsteal(value, value, NULL, str, false);
 
                        RDEBUG2("EXPAND %%{%s:%pS}", node->fmt, result_str);
@@ -745,7 +745,7 @@ xlat_action_t xlat_frame_eval(TALLOC_CTX *ctx, fr_cursor_t *out, xlat_exp_t cons
                         *      We unfortunately need to dup the buffer
                         *      because references aren't threadsafe.
                         */
-                       MEM(value = fr_value_box_alloc(ctx, FR_TYPE_STRING, NULL, false));
+                       MEM(value = fr_value_box_alloc_null(ctx));
                        fr_value_box_strdup_buffer(value, value, NULL, node->fmt, false);
                        fr_cursor_append(out, value);
                        continue;
@@ -789,7 +789,7 @@ xlat_action_t xlat_frame_eval(TALLOC_CTX *ctx, fr_cursor_t *out, xlat_exp_t cons
                        if (slen < 0) goto fail;
                        if (slen == 0) continue;
 
-                       MEM(value = fr_value_box_alloc(ctx, FR_TYPE_STRING, NULL, false));
+                       MEM(value = fr_value_box_alloc_null(ctx));
                        fr_value_box_strsteal(value, value, NULL, str, false);
                        fr_cursor_append(out, value);
 
@@ -838,7 +838,7 @@ xlat_action_t xlat_frame_eval(TALLOC_CTX *ctx, fr_cursor_t *out, xlat_exp_t cons
                         *      we just need to fix up the talloc lineage
                         *      and box it.
                         */
-                       MEM(value = fr_value_box_alloc(ctx, FR_TYPE_STRING, NULL, false));
+                       MEM(value = fr_value_box_alloc_null(ctx));
                        fr_value_box_strsteal(value, value, NULL, str, false);
                        fr_cursor_append(out, value);
 
index b7096ef10d31fb6315b393537db9f81f4d67a9fc..351ad790ab646d728fd0a4052cf3198829f9e8f3 100644 (file)
@@ -914,7 +914,7 @@ static xlat_action_t xlat_concat(TALLOC_CTX *ctx, fr_cursor_t *out,
         *      Otherwise, join the boxes together commas
         *      FIXME It'd be nice to set a custom delimiter
         */
-       result = fr_value_box_alloc(ctx, FR_TYPE_STRING, NULL, false);
+       result = fr_value_box_alloc_null(ctx);
        if (!result) {
        error:
                RPEDEBUG("Failed concatenating input");
@@ -924,7 +924,7 @@ static xlat_action_t xlat_concat(TALLOC_CTX *ctx, fr_cursor_t *out,
        buff = fr_value_box_list_asprint(result, *in, ",", '\0');
        if (!buff) goto error;
 
-       fr_value_box_strsteal(result, result, NULL, buff, true);        /* Fixme - It may not be tainted */
+       fr_value_box_strsteal(result, result, NULL, buff, fr_value_box_list_tainted(*in));
 
        fr_cursor_insert(out, result);
 
@@ -970,7 +970,7 @@ static xlat_action_t xlat_bin(TALLOC_CTX *ctx, fr_cursor_t *out,
        if ((p[0] == '0') && (p[1] == 'x')) p += 2;
        if (p == end) return XLAT_ACTION_DONE;
 
-       result = fr_value_box_alloc(ctx, FR_TYPE_STRING, NULL, false);
+       result = fr_value_box_alloc_null(ctx);
        if (!result) {
                REDEBUG("Failed allocating output");
                goto error;
index 598016518783955ddce7f0911e2339178d48b701..ace47ac87b8a815635057e946a0bf8a804834a62 100644 (file)
@@ -237,7 +237,7 @@ error:
        if (len > 0) {
                fr_value_box_t *vb;
 
-               MEM(vb = fr_value_box_alloc(ctx, FR_TYPE_STRING, NULL, true));
+               MEM(vb = fr_value_box_alloc_null(ctx));
                fr_value_box_bstrndup(vb, vb, NULL, body, len, true);
                fr_cursor_insert(out, vb);
        }