From: Alan T. DeKok Date: Sun, 17 Apr 2022 19:19:58 +0000 (-0400) Subject: move / rename "pair raw from network" X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b55fc8c25112a48e55840f37f75cead112ec4af6;p=thirdparty%2Ffreeradius-server.git move / rename "pair raw from network" so that it's in a better place, with a better name --- diff --git a/src/lib/util/decode.c b/src/lib/util/decode.c index e2874cb8a25..02128f734c1 100644 --- a/src/lib/util/decode.c +++ b/src/lib/util/decode.c @@ -29,7 +29,7 @@ /** Decode an array of values from the network * * @param[in] ctx context to alloc new attributes in. - * @param[out] out Where to write the decoded options. + * @param[out] out Where to write the decoded #fr_pair_t * @param[in] parent dictionary entry, must have parent->flags.array set * @param[in] data to parse. * @param[in] data_len of data to parse. @@ -57,3 +57,41 @@ ssize_t fr_pair_array_from_network(TALLOC_CTX *ctx, fr_pair_list_t *out, fr_dict return data_len; } + +/** Create a "raw" pair from the network data + * + * @param[in] ctx context to alloc new attributes in. + * @param[in] parent dictionary entry + * @param[in] data to parse. + * @param[in] data_len of data to parse. + */ +fr_pair_t *fr_pair_raw_from_network(TALLOC_CTX *ctx, fr_dict_attr_t const *parent, uint8_t const *data, size_t data_len) +{ + fr_pair_t *vp; + fr_dict_attr_t *unknown; + fr_dict_attr_t const *child; + +#if defined(__clang_analyzer__) || !defined(NDEBUG) + if (!parent->parent) return NULL; /* stupid static analyzers */ +#endif + + /* + * Build an unknown attr of the entire data. + */ + unknown = fr_dict_unknown_attr_afrom_da(ctx, parent); + if (!unknown) return NULL; + unknown->flags.is_raw = 1; + + vp = fr_pair_afrom_da(ctx, unknown); /* makes a copy of 'child' */ + child = unknown; + fr_dict_unknown_free(&child); + if (!vp) return NULL; + + if (fr_value_box_from_network(vp, &vp->data, vp->da->type, vp->da, + &FR_DBUFF_TMP(data, data_len), data_len, true) < 0) { + talloc_free(vp); + return NULL; + } + + return vp; +} diff --git a/src/lib/util/decode.h b/src/lib/util/decode.h index 6f4b50357c5..5943574505e 100644 --- a/src/lib/util/decode.h +++ b/src/lib/util/decode.h @@ -41,7 +41,11 @@ typedef ssize_t (*fr_pair_decode_value_t)(TALLOC_CTX *ctx, fr_pair_list_t *out, uint8_t const *data, size_t const data_len, fr_proto_decode_ctx_t *decode_ctx); \ ssize_t fr_pair_array_from_network(TALLOC_CTX *ctx, fr_pair_list_t *out, fr_dict_attr_t const *parent, - uint8_t const *data, size_t data_len, void *decode_ctx, fr_pair_decode_value_t decode_value); + uint8_t const *data, size_t data_len, void *decode_ctx, fr_pair_decode_value_t decode_value) CC_HINT(nonnull(1,2,3,4,6)); + +fr_pair_t *fr_pair_raw_from_network(TALLOC_CTX *ctx, fr_dict_attr_t const *parent, + uint8_t const *data, size_t data_len) CC_HINT(nonnull); + #ifdef __cplusplus } diff --git a/src/lib/util/struct.c b/src/lib/util/struct.c index 5c7f326f271..db0bab05ed7 100644 --- a/src/lib/util/struct.c +++ b/src/lib/util/struct.c @@ -25,39 +25,6 @@ RCSID("$Id$") #include -fr_pair_t *fr_raw_from_network(TALLOC_CTX *ctx, fr_dict_attr_t const *parent, uint8_t const *data, size_t data_len) -{ - fr_pair_t *vp; - fr_dict_attr_t *unknown; - fr_dict_attr_t const *child; - -#if defined(__clang_analyzer__) || !defined(NDEBUG) - if (!parent->parent) return NULL; /* stupid static analyzers */ -#endif - - /* - * Build an unknown attr of the entire data. - */ - unknown = fr_dict_unknown_attr_afrom_da(ctx, parent); - if (!unknown) return NULL; - unknown->flags.is_raw = 1; - - vp = fr_pair_afrom_da(ctx, unknown); /* makes a copy of 'child' */ - child = unknown; - fr_dict_unknown_free(&child); - if (!vp) return NULL; - - if (fr_value_box_from_network(vp, &vp->data, vp->da->type, vp->da, - &FR_DBUFF_TMP(data, data_len), data_len, true) < 0) { - talloc_free(vp); - return NULL; - } - - return vp; -} - - - /** Convert a STRUCT to one or more VPs * */ @@ -330,7 +297,7 @@ ssize_t fr_struct_from_network(TALLOC_CTX *ctx, fr_pair_list_t *out, fr_pair_list_free(child_list); } - vp = fr_raw_from_network(ctx, parent, data, data_len); + vp = fr_pair_raw_from_network(ctx, parent, data, data_len); if (!vp) goto oom; /* @@ -391,7 +358,7 @@ ssize_t fr_struct_from_network(TALLOC_CTX *ctx, fr_pair_list_t *out, goto unknown; } - vp = fr_raw_from_network(child_ctx, child, p, end - p); + vp = fr_pair_raw_from_network(child_ctx, child, p, end - p); if (!vp) { FR_PROTO_TRACE("Failed creating raw VP from malformed or unknown substruct"); fr_dict_unknown_free(&child); diff --git a/src/lib/util/struct.h b/src/lib/util/struct.h index 367438a88e6..3de6769741c 100644 --- a/src/lib/util/struct.h +++ b/src/lib/util/struct.h @@ -45,9 +45,6 @@ ssize_t fr_struct_to_network(fr_dbuff_t *dbuff, fr_da_stack_t *da_stack, unsigne fr_dcursor_t *cursor, void *encode_ctx, fr_encode_dbuff_t encode_value, fr_encode_dbuff_t encode_tlv) CC_HINT(nonnull(1,2,4)); -fr_pair_t *fr_raw_from_network(TALLOC_CTX *ctx, fr_dict_attr_t const *parent, - uint8_t const *data, size_t data_len) CC_HINT(nonnull); - #ifdef __cplusplus } #endif diff --git a/src/protocols/dhcpv4/decode.c b/src/protocols/dhcpv4/decode.c index 7bb00bbc2cf..131d7eefce3 100644 --- a/src/protocols/dhcpv4/decode.c +++ b/src/protocols/dhcpv4/decode.c @@ -380,7 +380,7 @@ static ssize_t decode_tlv(TALLOC_CTX *ctx, fr_pair_list_t *out, fr_dict_attr_t c if (data_len < 3) { fr_pair_t *vp; - vp = fr_raw_from_network(ctx, parent, data, data_len); + vp = fr_pair_raw_from_network(ctx, parent, data, data_len); if (!vp) return -1; fr_pair_append(out, vp); return data_len; diff --git a/src/protocols/radius/decode.c b/src/protocols/radius/decode.c index 24978001dd7..3246cf3383c 100644 --- a/src/protocols/radius/decode.c +++ b/src/protocols/radius/decode.c @@ -1652,7 +1652,7 @@ ssize_t fr_radius_decode_pair_value(TALLOC_CTX *ctx, fr_pair_list_t *out, raw: if (vp) talloc_free(vp); - vp = fr_raw_from_network(ctx, parent, data, attr_len); + vp = fr_pair_raw_from_network(ctx, parent, data, attr_len); if (!vp) return -1; tag = 0;