]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
use fr_value_box_strdup_shallow_replace
authorAlan T. DeKok <aland@freeradius.org>
Wed, 2 Apr 2025 01:04:08 +0000 (21:04 -0400)
committerAlan T. DeKok <aland@freeradius.org>
Wed, 2 Apr 2025 01:05:04 +0000 (21:05 -0400)
which is less work than the alternatives

src/lib/ldap/util.c
src/modules/rlm_ldap/rlm_ldap.c
src/modules/rlm_sql/rlm_sql.c

index 15a5ca2a3c6fe2049bff450343ce6bd7e49387ed..7bdabe8117965e7890e17b0fdd4d4fff228c1f00 100644 (file)
@@ -112,12 +112,10 @@ int fr_ldap_box_escape(fr_value_box_t *vb, UNUSED void *uctx)
        fr_sbuff_t              sbuff;
        fr_sbuff_uctx_talloc_t  sbuff_ctx;
        size_t                  len;
-       fr_value_box_entry_t    entry;
 
-       if (fr_value_box_is_safe_for(vb, fr_ldap_box_escape)) return 0;
+       fr_assert(!fr_value_box_is_safe_for(vb, fr_ldap_box_escape));
 
        if ((vb->type != FR_TYPE_STRING) && (fr_value_box_cast_in_place(vb, vb, FR_TYPE_STRING, NULL) < 0)) {
-               fr_value_box_clear_value(vb);
                return -1;
        }
 
@@ -134,15 +132,10 @@ int fr_ldap_box_escape(fr_value_box_t *vb, UNUSED void *uctx)
        if (len == vb->vb_length) {
                talloc_free(fr_sbuff_buff(&sbuff));
        } else {
-               entry = vb->entry;
                fr_sbuff_trim_talloc(&sbuff, len);
-               fr_value_box_clear_value(vb);
-               fr_value_box_strdup_shallow(vb, NULL, fr_sbuff_buff(&sbuff), vb->tainted);
-               vb->entry = entry;
+               fr_value_box_strdup_shallow_replace(vb, fr_sbuff_buff(&sbuff), len);
        }
 
-       fr_value_box_mark_safe_for(vb, fr_ldap_box_escape);
-
        return 0;
 }
 
index 03da5252b8cc295bb579bbc4c224cd0413cc87ca..35b5a75d66c605afe8cf054b4bd441957d9c63b5 100644 (file)
@@ -531,8 +531,7 @@ static int ldap_uri_part_escape(fr_value_box_t *vb, UNUSED void *uctx)
        len = fr_ldap_uri_escape_func(NULL, fr_sbuff_buff(&sbuff), vb->vb_length * 3 + 1, vb->vb_strvalue, NULL);
 
        fr_sbuff_trim_talloc(&sbuff, len);
-       fr_value_box_clear_value(vb);
-       fr_value_box_strdup_shallow(vb, NULL, fr_sbuff_buff(&sbuff), vb->tainted);
+       fr_value_box_strdup_shallow_replace(vb, fr_sbuff_buff(&sbuff), len);
 
        return 0;
 }
index 70e3cfb3259880bc0af0503e9ad02133b3832031..a0cfdd6ca285f99026a4be76a612565300d72744 100644 (file)
@@ -350,7 +350,6 @@ static int CC_HINT(nonnull(2,3)) sql_xlat_escape(request_t *request, fr_value_bo
        void                            *arg = NULL;
        rlm_sql_escape_uctx_t           *ctx = uctx;
        rlm_sql_t const                 *inst = talloc_get_type_abort_const(ctx->sql, rlm_sql_t);
-       fr_value_box_entry_t            entry;
        rlm_sql_thread_t                *thread = talloc_get_type_abort(module_thread(inst->mi)->data, rlm_sql_thread_t);
 
        /*
@@ -399,13 +398,8 @@ static int CC_HINT(nonnull(2,3)) sql_xlat_escape(request_t *request, fr_value_bo
        len = inst->sql_escape_func(request, fr_sbuff_buff(&sbuff), vb->vb_length * 3 + 1, vb->vb_strvalue, arg);
        if (len < 0) goto error;
 
-       /*
-        *      fr_value_box_strdup_shallow resets the dlist entries - take a copy
-        */
-       entry = vb->entry;
        fr_sbuff_trim_talloc(&sbuff, len);
-       fr_value_box_clear_value(vb);
-       fr_value_box_strdup_shallow(vb, NULL, fr_sbuff_buff(&sbuff), vb->tainted);
+       fr_value_box_strdup_shallow_replace(vb, fr_sbuff_buff(&sbuff), len);
 
        /*
         *      Different databases have slightly different ideas as
@@ -414,7 +408,6 @@ static int CC_HINT(nonnull(2,3)) sql_xlat_escape(request_t *request, fr_value_bo
         *      cross-contaminate "safe" values across databases.
         */
        fr_value_box_mark_safe_for(vb, inst->driver);
-       vb->entry = entry;
 
        return 0;
 }