]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Unconsting
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Mon, 8 Feb 2021 15:29:03 +0000 (15:29 +0000)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Mon, 8 Feb 2021 15:41:43 +0000 (15:41 +0000)
33 files changed:
src/bin/radmin.c
src/include/build.h
src/lib/server/cf_util.c
src/lib/server/dl_module.c
src/lib/server/module.c
src/lib/server/pool.c
src/lib/unlang/xlat_eval.c
src/lib/util/dict_tokenize.c
src/lib/util/dict_unknown.c
src/lib/util/dict_util.c
src/lib/util/rbtree.c
src/lib/util/trie.c
src/lib/util/value.c
src/modules/proto_ldap_sync/proto_ldap_sync.c
src/modules/rlm_cache/drivers/rlm_cache_rbtree/rlm_cache_rbtree.c
src/modules/rlm_cipher/rlm_cipher.c
src/modules/rlm_csv/rlm_csv.c
src/modules/rlm_krb5/krb5.c
src/modules/rlm_krb5/rlm_krb5.c
src/modules/rlm_ldap/rlm_ldap.c
src/modules/rlm_lua/lua.c
src/modules/rlm_python/rlm_python.c
src/modules/rlm_sql/drivers/rlm_sql_db2/rlm_sql_db2.c
src/modules/rlm_sql/drivers/rlm_sql_freetds/rlm_sql_freetds.c
src/modules/rlm_sql/drivers/rlm_sql_oracle/rlm_sql_oracle.c
src/modules/rlm_sql/drivers/rlm_sql_unixodbc/rlm_sql_unixodbc.c
src/modules/rlm_unbound/rlm_unbound.c
src/tests/util/atomic_queue_test.c
src/tests/util/channel_test.c
src/tests/util/control_test.c
src/tests/util/message_set_test.c
src/tests/util/ring_buffer_test.c
src/tests/util/worker_test.c

index d283c75538bc719ae96e41edf1a0168af0096150..9ee54fc8a34380877c1919f39fda49a6b70c22cd 100644 (file)
@@ -538,7 +538,7 @@ static int cmd_set_profile_status(UNUSED FILE *fp, FILE *fp_err, UNUSED void *ct
                }
 
                if (info->argc >= 2) {
-                       memcpy(&filename, &info->argv[1], sizeof(filename)); /* const issues */
+                       filename = UNCONST(char *, info->argv[1]);
                } else {
                        filename = getenv("FR_PROFILE_FILENAME");
                }
index 3e7c7c86afdeb34cdb3305731133f1d863e0df98..64dd710a45a6653a323486c2e9d36197b72c8153 100644 (file)
@@ -71,12 +71,22 @@ extern "C" {
 #define STRINGIFY(x) XSTRINGIFY(x)
 #define JOINSTR(x,y) XSTRINGIFY(x ## y)
 
-/*
- *     Helpers for initialising arrays
- *     of string literals.
+/** Helper for initialising arrays of string literals.
  */
 #define L(_str)                { _str, sizeof(_str) - 1 }
 
+/** Comparison macro for integers
+ *
+ */
+#define CMP(_a, _b)    (((_a) > (_b)) - ((_a) < (_b)))
+
+/** Remove const qualification from a pointer
+ *
+ * @param[in] _type    The non-const version of the type.
+ * @param[in] _ptr     to de-const.
+ */
+#define UNCONST(_type, _ptr)   ((_type)((uintptr_t)(_ptr)))
+
 /*
  *     HEX concatenation macros
  */
@@ -182,6 +192,7 @@ extern "C" {
 #  define DIAG_PUSH() DIAG_PRAGMA(push)
 #  define DIAG_POP() DIAG_PRAGMA(pop)
 #else
+#  define DIAG_UNKNOWN_PRAGMAS
 #  define DIAG_OFF(_x)
 #  define DIAG_ON(_x)
 #  define DIAG_PUSH()
index ddadd494023d9fc203d5ddca1f411b904a78fb68..b257141a7e1bea82969c617ec2f5d50db1983cb1 100644 (file)
@@ -1693,7 +1693,6 @@ static int _cf_data_walk_cb(void *data, void *uctx)
        cf_data_walk_ctx_t      *cd_ctx = uctx;
        CONF_DATA               *cd = data;
        CONF_ITEM               *ci = data;
-       void                    *mutable;
        int                     ret;
 
        /*
@@ -1703,8 +1702,7 @@ static int _cf_data_walk_cb(void *data, void *uctx)
 
        if ((cd->type != cd_ctx->type) && (strcmp(cd->type, cd_ctx->type) != 0)) return 0;
 
-       memcpy(&mutable, &cd->data, sizeof(data));
-       ret = cd_ctx->cb(mutable, cd_ctx->ctx);
+       ret = cd_ctx->cb(UNCONST(void *, cd->data), cd_ctx->ctx);
 
        return ret;
 }
index 69339b3c10a38c9c7cdf1749b1f7e057838ab437..fc9bc9f0c2491a73393d442261a822d0bedb1739 100644 (file)
@@ -198,15 +198,11 @@ static int dl_module_magic_verify(CONF_SECTION const *cs, dl_module_common_t con
  */
 dl_module_inst_t const *dl_module_instance_by_data(void const *data)
 {
-       void *mutable;
-
        DL_INIT_CHECK;
 
-       memcpy(&mutable, &data, sizeof(mutable));
-
        if (dl_inst_cache.data == data) return dl_inst_cache.inst;
 
-       return rbtree_finddata(dl_module_loader->inst_data_tree, &(dl_module_inst_t){ .data = mutable });
+       return rbtree_finddata(dl_module_loader->inst_data_tree, &(dl_module_inst_t){ .data = UNCONST(void *, data) });
 }
 
 /** Lookup instance name via instance data
index b35ccdbbf5b1d7f5531fa270f6a692eb26738c2c..246da6599544b0790fc33d9e1d593877f74903c4 100644 (file)
@@ -1080,13 +1080,10 @@ module_instance_t *module_by_name_and_method(module_method_t *method, rlm_compon
 module_instance_t *module_by_data(void const *data)
 {
        module_instance_t *mi;
-       void *mutable;
-
-       memcpy(&mutable, &data, sizeof(mutable));
 
        mi = rbtree_finddata(module_instance_data_tree,
                             &(module_instance_t){
-                               .dl_inst = &(dl_module_inst_t){ .data = mutable },
+                               .dl_inst = &(dl_module_inst_t){ .data = UNCONST(void *, data) },
                             });
        if (!mi) return NULL;
 
index 44955fa6f5988a33eed2d273a2155cbe92e4c95f..6bc4a26910e685f4642d26266bac04cc2f1e4dc8 100644 (file)
@@ -1024,16 +1024,10 @@ fr_pool_t *fr_pool_init(TALLOC_CTX *ctx,
 
        DEBUG2("Initialising connection pool");
 
-       {
-               CONF_SECTION *mutable;
-
-               memcpy(&mutable, &cs, sizeof(mutable));
-
-               if (cf_section_rules_push(mutable, pool_config) < 0) goto error;
-               if (cf_section_parse(pool, pool, mutable) < 0) {
-                       PERROR("Configuration parsing failed");
-                       goto error;
-               }
+       if (cf_section_rules_push(UNCONST(CONF_SECTION *, cs), pool_config) < 0) goto error;
+       if (cf_section_parse(pool, pool, UNCONST(CONF_SECTION *, cs)) < 0) {
+               PERROR("Configuration parsing failed");
+               goto error;
        }
 
        /*
index 0df10bb2374a7a991de9e5d5e6e58eead760e9ce..e47cbf683f2792ef76950ce7a23de11d501e3068 100644 (file)
@@ -1437,14 +1437,11 @@ static char *xlat_sync_eval(TALLOC_CTX *ctx, request_t *request, xlat_exp_t cons
        if (str && escape) {
                size_t len;
                char *escaped;
-               void *mutable;
 
                len = talloc_array_length(str) * 3;
 
                escaped = talloc_array(ctx, char, len);
-
-               memcpy(&mutable, &escape_ctx, sizeof(mutable));
-               escape(request, escaped, len, str, mutable);
+               escape(request, escaped, len, str, UNCONST(void *, escape_ctx));
                talloc_free(str);
                str = escaped;
        }
index a85363ab6752116d0502802d4e7f7521d2b7d215..059b1a4904bb8bb354dede3df28a49182e1c5a54 100644 (file)
@@ -1480,8 +1480,7 @@ post_option:
 
        if (dict_protocol_add(dict) < 0) goto error;
 
-       memcpy(&mutable, &dict->root, sizeof(mutable));
-
+       mutable = UNCONST(fr_dict_attr_t *, dict->root);
        if (!type_size) {
                mutable->flags.type_size = dict->default_type_size;
                mutable->flags.length = dict->default_type_length;
@@ -1536,8 +1535,7 @@ static int dict_read_process_vendor(fr_dict_t *dict, char **argv, int argc)
                return -1;
        }
 
-       memcpy(&mutable, &dv, sizeof(mutable));
-
+       mutable = UNCONST(fr_dict_vendor_t *, dv);
        mutable->type = type;
        mutable->length = length;
        mutable->flags = continuation;
@@ -1769,10 +1767,7 @@ static int _dict_from_file(dict_tokenize_ctx_t *ctx,
                                 *      with the structure size/
                                 */
                                if (ctx->stack[ctx->stack_depth].struct_size <= 255) {
-                                       fr_dict_attr_t *mutable;
-
-                                       memcpy(&mutable, &da, sizeof(mutable));
-                                       mutable->flags.length = ctx->stack[ctx->stack_depth].struct_size;
+                                       UNCONST(fr_dict_attr_t *, da)->flags.length = ctx->stack[ctx->stack_depth].struct_size;
                                } /* else length 0 means "unknown / variable size / too large */
                        } else {
                                fr_assert(da->type == FR_TYPE_TLV);
@@ -2106,7 +2101,6 @@ static int _dict_from_file(dict_tokenize_ctx_t *ctx,
                        fr_dict_attr_t const    *vsa_da;
                        fr_dict_attr_t const    *vendor_da;
                        fr_dict_attr_t          *new;
-                       fr_dict_attr_t          *mutable;
 
                        if (argc < 2) {
                                fr_strerror_const_push("Invalid BEGIN-VENDOR entry");
@@ -2196,13 +2190,12 @@ static int _dict_from_file(dict_tokenize_ctx_t *ctx,
                                                      vsa_da, argv[1], vendor->pen, FR_TYPE_VENDOR, &flags);
                                if (unlikely(!new)) goto error;
 
-                               memcpy(&mutable, &vsa_da, sizeof(mutable));
-                               if (dict_attr_child_add(mutable, new) < 0) {
+                               if (dict_attr_child_add(UNCONST(fr_dict_attr_t *, vsa_da), new) < 0) {
                                        talloc_free(new);
                                        goto error;
                                }
 
-                               if (dict_attr_add_to_namespace(ctx->dict, mutable, new) < 0) {
+                               if (dict_attr_add_to_namespace(ctx->dict, UNCONST(fr_dict_attr_t *, vsa_da), new) < 0) {
                                        talloc_free(new);
                                        goto error;
                                }
index 12211f020a1ee9a3825ad0434ad1282b05cbd939..f4030e3e12984b6ab26bbc8d6d6030c403f2527a 100644 (file)
@@ -81,7 +81,7 @@ fr_dict_attr_t const *fr_dict_unknown_add(fr_dict_t *dict, fr_dict_attr_t const
         *      container.
         */
        if (unknown->type == FR_TYPE_VENDOR) {
-               fr_dict_attr_t *mutable, *n;
+               fr_dict_attr_t *n;
 
                if (dict_vendor_add(dict, unknown->name, unknown->attr) < 0) return NULL;
 
@@ -91,8 +91,7 @@ fr_dict_attr_t const *fr_dict_unknown_add(fr_dict_t *dict, fr_dict_attr_t const
                /*
                 *      Setup parenting for the attribute
                 */
-               memcpy(&mutable, &unknown->parent, sizeof(mutable));
-               if (dict_attr_child_add(mutable, n) < 0) return NULL;
+               if (dict_attr_child_add(UNCONST(fr_dict_attr_t *, unknown->parent), n) < 0) return NULL;
 
                return n;
        }
index dc575d75bea574ce7df4e47bcad5b64d3ae2cc99..3fe57386cb7242472786a6f37447d62464861dc7 100644 (file)
@@ -1171,7 +1171,6 @@ int fr_dict_attr_add(fr_dict_t *dict, fr_dict_attr_t const *parent,
 {
        fr_dict_attr_t          *n;
        fr_dict_attr_t const    *old;
-       fr_dict_attr_t          *mutable;
        fr_dict_attr_flags_t    our_flags = *flags;
 
        if (unlikely(dict->read_only)) {
@@ -1231,15 +1230,10 @@ int fr_dict_attr_add(fr_dict_t *dict, fr_dict_attr_t const *parent,
                return -1;
        }
 
-       /*
-        *      Setup parenting for the attribute
-        */
-       memcpy(&mutable, &parent, sizeof(mutable));
-
        /*
         *      Add in by number
         */
-       if (dict_attr_child_add(mutable, n) < 0) goto error;
+       if (dict_attr_child_add(UNCONST(fr_dict_attr_t *, parent), n) < 0) goto error;
 
        /*
         *      If it's a group attribute, the default
@@ -1404,13 +1398,7 @@ int dict_attr_enum_add_name(fr_dict_attr_t *da, char const *name,
        /*
         *      Mark the attribute up as having an enumv
         */
-       {
-               fr_dict_attr_t *mutable;
-
-               memcpy(&mutable, &da, sizeof(mutable));
-
-               mutable->flags.has_value = 1;
-       }
+       UNCONST(fr_dict_attr_t *, da)->flags.has_value = 1;
 
        return 0;
 }
@@ -3417,15 +3405,11 @@ void fr_dict_global_read_only(void)
  */
 fr_dict_t *fr_dict_unconst(fr_dict_t const *dict)
 {
-       fr_dict_t *mutable;
-
        if (unlikely(dict->read_only)) {
                fr_strerror_printf("%s dictionary has been marked as read only", fr_dict_root(dict)->name);
                return NULL;
        }
-
-       memcpy(&mutable, &dict, sizeof(dict));
-       return mutable;
+       return UNCONST(fr_dict_t *, dict);
 }
 
 /** Coerce to non-const
@@ -3433,7 +3417,6 @@ fr_dict_t *fr_dict_unconst(fr_dict_t const *dict)
  */
 fr_dict_attr_t *fr_dict_attr_unconst(fr_dict_attr_t const *da)
 {
-       fr_dict_attr_t *mutable;
        fr_dict_t *dict;
 
        dict = dict_by_da(da);
@@ -3442,8 +3425,7 @@ fr_dict_attr_t *fr_dict_attr_unconst(fr_dict_attr_t const *da)
                return NULL;
        }
 
-       memcpy(&mutable, &da, sizeof(da));
-       return mutable;
+       return UNCONST(fr_dict_attr_t *, da);
 }
 
 fr_dict_t const *fr_dict_internal(void)
index 214528fc7f2e7610a6abddcba44dbc66f99f3245..3e6442db2174cd34fd9543d9f6af46e44d6ce0d0 100644 (file)
@@ -407,13 +407,7 @@ fr_rb_node_t *rbtree_insert_node(rbtree_t *tree, void *data)
 
 bool rbtree_insert(rbtree_t *tree, void const *data)
 {
-       void *mutable;
-
-       if (unlikely(tree->being_freed)) return NULL;
-
-       memcpy(&mutable, &data, sizeof(mutable));
-
-       if (rbtree_insert_node(tree, mutable)) return true;
+       if (rbtree_insert_node(tree, UNCONST(void *, data))) return true;
        return false;
 }
 
index 49e89544d61c8a47f6d7229a0a093fd75fda7b30..80c703d2dd3cabc69c56b2dee8c92cc0fb344952 100644 (file)
@@ -2590,17 +2590,15 @@ static int fr_trie_print_cb(fr_trie_t *trie, fr_trie_callback_t *cb, int keylen,
 static int fr_trie_user_cb(fr_trie_t *trie, fr_trie_callback_t *cb, int keylen, UNUSED bool more)
 {
        fr_trie_user_t *user;
-       void *data;
 
        if (!trie || (trie->type != FR_TRIE_USER)) return 0;
 
        user = (fr_trie_user_t *) trie;
-       memcpy(&data, &user->data, sizeof(data)); /* const issues */
 
        /*
         *      Call the user function with the key, key length, and data.
         */
-       if (cb->user_callback(cb->ctx, cb->start, keylen, data) < 0) {
+       if (cb->user_callback(cb->ctx, cb->start, keylen, UNCONST(void *, user->data)) < 0) {
                return -1;
        }
 
@@ -2609,14 +2607,14 @@ static int fr_trie_user_cb(fr_trie_t *trie, fr_trie_callback_t *cb, int keylen,
 
 int fr_trie_walk(fr_trie_t *ft, void *ctx, fr_trie_walk_t callback)
 {
-       fr_trie_callback_t my_cb;
        uint8_t buffer[MAX_KEY_BYTES + 1];
-
-       my_cb.start = buffer;
-       my_cb.end = buffer + sizeof(buffer);
-       my_cb.callback = fr_trie_user_cb;
-       my_cb.user_callback = callback;
-       my_cb.ctx = ctx;
+       fr_trie_callback_t my_cb = {
+               .start = buffer,
+               .end = buffer + sizeof(buffer),
+               .callback = fr_trie_user_cb,
+               .user_callback = callback,
+               .ctx = ctx
+       };
 
        memset(buffer, 0, sizeof(buffer));
 
index 953aac0d19db1d39df140e259587b5462315e277..1ba3ebe20c0b477300744e3de121b69c7a25413a 100644 (file)
@@ -3355,14 +3355,11 @@ int fr_value_box_strtrim(TALLOC_CTX *ctx, fr_value_box_t *vb)
 {
        size_t  len;
        char    *str;
-       char    *mutable;
 
        if (!fr_cond_assert(vb->type == FR_TYPE_STRING)) return -1;
 
        len = strlen(vb->vb_strvalue);
-
-       memcpy(&mutable, &vb->vb_strvalue, sizeof(mutable));
-       str = talloc_realloc(ctx, mutable, char, len + 1);
+       str = talloc_realloc(ctx, UNCONST(char *, &vb->vb_strvalue), char, len + 1);
        if (!str) {
                fr_strerror_const("Failed re-allocing string buffer");
                return -1;
@@ -3946,7 +3943,7 @@ void fr_value_box_memdup_buffer_shallow(TALLOC_CTX *ctx, fr_value_box_t *dst, fr
  */
 int fr_value_box_mem_append(TALLOC_CTX *ctx, fr_value_box_t *dst, uint8_t const *src, size_t len, bool tainted)
 {
-       uint8_t *ptr, *nptr;
+       uint8_t *nptr;
        size_t nlen;
 
        if (len == 0) return 0;
@@ -3958,27 +3955,26 @@ int fr_value_box_mem_append(TALLOC_CTX *ctx, fr_value_box_t *dst, uint8_t const
                return -1;
        }
 
-       memcpy(&ptr, &dst->datum.ptr, sizeof(ptr));     /* defeat const */
-       if (!fr_cond_assert(ptr)) return -1;
+       if (!fr_cond_assert(dst->datum.ptr)) return -1;
 
-       if (talloc_reference_count(ptr) > 0) {
+       if (talloc_reference_count(dst->datum.ptr) > 0) {
                fr_strerror_printf("%s: Boxed value has too many references", __FUNCTION__);
                return -1;
        }
 
        nlen = dst->vb_length + len;
-       nptr = talloc_realloc(ctx, ptr, uint8_t, dst->vb_length + len);
+       nptr = talloc_realloc(ctx, dst->datum.ptr, uint8_t, dst->vb_length + len);
        if (!nptr) {
                fr_strerror_printf("%s: Realloc of %s array from %zu to %zu bytes failed",
-                                  __FUNCTION__, talloc_get_name(ptr), talloc_array_length(ptr), nlen);
+                                  __FUNCTION__,
+                                  talloc_get_name(dst->datum.ptr), talloc_array_length(dst->datum.ptr), nlen);
                return -1;
        }
-       ptr = nptr;
 
-       memcpy(ptr + dst->vb_length, src, len); /* Copy data into the realloced buffer */
+       memcpy(nptr + dst->vb_length, src, len);        /* Copy data into the realloced buffer */
 
        dst->tainted = dst->tainted || tainted;
-       dst->datum.ptr = ptr;
+       dst->datum.ptr = nptr;
        dst->vb_length += len;
 
        return 0;
index 30714c9e5882c7583e0343dcee826bb86412ba3c..ca5a7678f2bc28e7cd4eade55f58f3c210398203 100644 (file)
@@ -567,9 +567,9 @@ static int proto_ldap_attributes_add(request_t *request, sync_config_t const *co
  * @param[in] now      current time.
  * @param[in] user_ctx Sync config.
  */
-static void proto_ldap_sync_reinit(fr_event_list_t *el, fr_time_t now, void *user_ctx)
+static void proto_ldap_sync_reinit(fr_event_list_t *el, fr_time_t now, void const *user_ctx)
 {
-       sync_config_t           *config = talloc_get_type_abort(user_ctx, sync_config_t);
+       sync_config_t const     *config = talloc_get_type_abort_const(user_ctx, sync_config_t);
        proto_ldap_inst_t       *inst = talloc_get_type_abort(config->user_ctx, proto_ldap_inst_t);
 
        /*
@@ -625,14 +625,12 @@ static int _proto_ldap_refresh_required(fr_ldap_connection_t *conn, sync_config_
 {
        rad_listen_t            *listen = talloc_get_type_abort(user_ctx, rad_listen_t);
        proto_ldap_inst_t       *inst = talloc_get_type_abort(listen->data, proto_ldap_inst_t);;
-       void                    *ctx;
 
        sync_state_destroy(conn, sync_id);      /* Destroy the old state */
 
        DEBUG2("Refresh required");
 
-       memcpy(&ctx, &config, sizeof(ctx));
-       proto_ldap_sync_reinit(inst->el, fr_time(), ctx);
+       proto_ldap_sync_reinit(inst->el, fr_time(), user_ctx);
 
        return 0;
 }
@@ -932,10 +930,9 @@ static int proto_ldap_socket_recv(rad_listen_t *listen)
                /*
                 *      Schedule sync reinit, but don't perform it immediately.
                 */
-               memcpy(&ctx, &config, sizeof(ctx));
                if (fr_event_timer_in(inst, inst->el, &inst->sync_retry_ev,
                                      inst->sync_retry_interval,
-                                     proto_ldap_sync_reinit, ctx) < 0) {
+                                     proto_ldap_sync_reinit, config) < 0) {
                        FATAL("Failed inserting event: %s", fr_strerror());
                }
                return 1;
@@ -946,7 +943,6 @@ static int proto_ldap_socket_recv(rad_listen_t *listen)
                /*
                 *      Schedule conn reinit, but don't perform it immediately
                 */
-               memcpy(&ctx, &config, sizeof(ctx));
                if (fr_event_timer_in(inst, inst->el, &inst->conn_retry_ev,
                                      inst->conn_retry_interval,
                                      proto_ldap_connection_init, listen) < 0) {
@@ -1109,8 +1105,7 @@ static int proto_ldap_socket_parse(CONF_SECTION *cs, rad_listen_t *listen)
 
        fr_assert(inst->handle_config.server_str[0]);
        inst->handle_config.name = talloc_typed_asprintf(inst, "proto_ldap_conn (%s)", listen->server);
-
-       memcpy(&inst->handle_config.server, &inst->handle_config.server_str[0], sizeof(inst->handle_config.server));
+       inst->handle_config.server = UNCONST(char *, inst->handle_config.server_str);
 
        /*
         *      Convert scope strings to enumerated constants
index dcf19480aa9832e70e63968c076c2a2d97486936..96d5a6172b2c0fb9bcb5768c30c4015d9dded506 100644 (file)
@@ -237,30 +237,27 @@ static cache_status_t cache_entry_insert(rlm_cache_config_t const *config, void
        cache_status_t status;
 
        rlm_cache_rbtree_t *driver = talloc_get_type_abort(instance, rlm_cache_rbtree_t);
-       rlm_cache_entry_t *my_c;
 
        fr_assert(handle == request);
 
        if (!request) return CACHE_ERROR;
 
-       memcpy(&my_c, &c, sizeof(my_c));
-
        /*
         *      Allow overwriting
         */
-       if (!rbtree_insert(driver->cache, my_c)) {
+       if (!rbtree_insert(driver->cache, c)) {
                status = cache_entry_expire(config, instance, request, handle, c->key, c->key_len);
                if ((status != CACHE_OK) && !fr_cond_assert(0)) return CACHE_ERROR;
 
-               if (!rbtree_insert(driver->cache, my_c)) {
+               if (!rbtree_insert(driver->cache, c)) {
                        RERROR("Failed adding entry");
 
                        return CACHE_ERROR;
                }
        }
 
-       if (fr_heap_insert(driver->heap, my_c) < 0) {
-               rbtree_deletebydata(driver->cache, my_c);
+       if (fr_heap_insert(driver->heap, UNCONST(rlm_cache_entry_t *, c)) < 0) {
+               rbtree_deletebydata(driver->cache, c);
                RERROR("Failed adding entry to expiry heap");
 
                return CACHE_ERROR;
index 39b0ec8df70fc1060ff43e235d684989a132fe3c..4ef5a1a3582628ab32fc98105031009a551965c7 100644 (file)
@@ -336,7 +336,6 @@ static int cipher_rsa_private_key_file_load(TALLOC_CTX *ctx, void *out, UNUSED v
        char const      *filename;
        cipher_rsa_t    *rsa_inst = talloc_get_type_abort(ctx, cipher_rsa_t);   /* Yeah this is a bit hacky */
        EVP_PKEY        *pkey;
-       void            *pass;
        int             pkey_type;
 
        filename = cf_pair_value(cf_item_to_pair(ci));
@@ -347,9 +346,8 @@ static int cipher_rsa_private_key_file_load(TALLOC_CTX *ctx, void *out, UNUSED v
                return -1;
        }
 
-       memcpy(&pass, &rsa_inst->private_key_password, sizeof(pass));
-
-       pkey = PEM_read_PrivateKey(fp, (EVP_PKEY **)out, _get_private_key_password, pass);
+       pkey = PEM_read_PrivateKey(fp, (EVP_PKEY **)out, _get_private_key_password,
+                                  UNCONST(void *, rsa_inst->private_key_password));
        fclose(fp);
 
        if (!pkey) {
index f48e36d770b1814d386b9fce9836eb0ed6005dd4..1e13acf6fad7d873984703f12272fdd7533d75fd 100644 (file)
@@ -502,17 +502,11 @@ static int csv_maps_verify(CONF_SECTION *cs, void *mod_inst, UNUSED void *proc_i
                return -1;
        }
 
-       for (map = maps;
-            map != NULL;
-            map = map->next) {
-               map_t *unconst_map;
-
-               memcpy(&unconst_map, &map, sizeof(map));
-
+       for (map = maps; map != NULL; map = map->next) {
                /*
                 *      This function doesn't change the map, so it's OK.
                 */
-               if (csv_map_verify(unconst_map, mod_inst) < 0) return -1;
+               if (csv_map_verify(UNCONST(map_t *, map), mod_inst) < 0) return -1;
        }
 
        return 0;
@@ -932,7 +926,7 @@ redo:
                                goto finish;
                        }
                } else {
-                       memcpy(&field_name, &map->rhs->name, sizeof(field_name)); /* const */
+                       field_name = UNCONST(char *, map->rhs->name);
                }
 
                field = fieldname2offset(inst, field_name, NULL);
index 220845343b5c3ff44d4052e90093fa96ad868d7a..6b39608b6fe7d936f253e145c982f9d8ee741bfc 100644 (file)
@@ -68,12 +68,7 @@ char const *rlm_krb5_error(rlm_krb5_t const *inst, krb5_context context, krb5_er
 #  ifdef HAVE_KRB5_FREE_ERROR_MESSAGE
                krb5_free_error_message(context, msg);
 #  elif defined(HAVE_KRB5_FREE_ERROR_STRING)
-               {
-                       char *free;
-
-                       memcpy(&free, &msg, sizeof(free));
-                       krb5_free_error_string(context, free);
-               }
+               krb5_free_error_string(context, UNCONST(char *, msg));
 #  else
 #    error "No way to free error strings, missing krb5_free_error_message() and krb5_free_error_string()"
 #  endif
index 7464a1a810c754afeecd88c97687d7cc456e7974..0fd9aea8c0f0e146b1419082874cf120a414e4c1 100644 (file)
@@ -420,7 +420,6 @@ static unlang_action_t CC_HINT(nonnull) mod_authenticate(rlm_rcode_t *p_result,
 
        krb5_principal          client = NULL;  /* actually a pointer value */
        krb5_creds              init_creds;
-       char                    *nonconst_password;             /* compiler warnings */
        fr_pair_t               *password;
 
        password = fr_pair_find_by_da(&request->request_pairs, attr_user_password);
@@ -469,9 +468,8 @@ static unlang_action_t CC_HINT(nonnull) mod_authenticate(rlm_rcode_t *p_result,
        /*
         *      Retrieve the TGT from the TGS/KDC and check we can decrypt it.
         */
-       memcpy(&nonconst_password, &password->vp_strvalue, sizeof(nonconst_password));
        RDEBUG2("Retrieving and decrypting TGT");
-       ret = krb5_get_init_creds_password(conn->context, &init_creds, client, nonconst_password,
+       ret = krb5_get_init_creds_password(conn->context, &init_creds, client, UNCONST(char *, password->vp_strvalue),
                                           NULL, NULL, 0, NULL, inst->gic_options);
        if (ret) {
                rcode = krb5_process_error(inst, request, conn, ret);
index 6f97506981392d6ef9117d906db98e3efa227ec2..a97788d4317669fd552c4c8bb4db20b4a5f2805e 100644 (file)
@@ -308,7 +308,6 @@ static ssize_t ldap_xlat(UNUSED TALLOC_CTX *ctx, char **out, size_t outlen,
        int                     ldap_errno;
 
        char const              *url;
-       char const              **attrs;
 
        LDAPControl             *server_ctrls[] = { NULL, NULL };
 
@@ -339,12 +338,10 @@ static ssize_t ldap_xlat(UNUSED TALLOC_CTX *ctx, char **out, size_t outlen,
        conn = mod_conn_get(inst, request);
        if (!conn) goto free_urldesc;
 
-       memcpy(&attrs, &ldap_url->lud_attrs, sizeof(attrs));
-
        if (fr_ldap_parse_url_extensions(&server_ctrls[0], request, conn, ldap_url->lud_exts) < 0) goto free_socket;
 
        status = fr_ldap_search(&result, request, &conn, ldap_url->lud_dn, ldap_url->lud_scope,
-                               ldap_url->lud_filter, attrs, server_ctrls, NULL);
+                               ldap_url->lud_filter, UNCONST(char **, ldap_url->lua_attr), server_ctrls, NULL);
 
 #ifdef HAVE_LDAP_CREATE_SORT_CONTROL
        if (server_ctrls[0]) ldap_control_free(server_ctrls[0]);
@@ -1938,11 +1935,8 @@ static int mod_instantiate(void *instance, CONF_SECTION *conf)
        if (inst->userobj_sort_by) {
                LDAPSortKey     **keys;
                int             ret;
-               char            *p;
-
-               memcpy(&p, &inst->userobj_sort_by, sizeof(p));
 
-               ret = ldap_create_sort_keylist(&keys, p);
+               ret = ldap_create_sort_keylist(&keys, UNCONST(char *, inst->userobj_sort_by));
                if (ret != LDAP_SUCCESS) {
                        cf_log_err(conf, "Invalid user.sort_by value \"%s\": %s",
                                      inst->userobj_sort_by, ldap_err2string(ret));
index 0666a9ae1702009f52d79db69cc3b33180321320..1a7097f32cf28979206c6792ce1709c4c685e4e9 100644 (file)
@@ -518,7 +518,7 @@ static int _lua_list_iterator_init(lua_State *L)
  */
 static int _lua_pair_accessor_init(lua_State *L)
 {
-       request_t                       *request = fr_lua_util_get_request();
+       request_t               *request = fr_lua_util_get_request();
        char const              *attr;
        fr_dict_attr_t const    *da;
        fr_dict_attr_t          *up;
@@ -534,7 +534,7 @@ static int _lua_pair_accessor_init(lua_State *L)
                REDEBUG("Unknown or invalid attribute name \"%s\"", attr);
                return -1;
        }
-       memcpy(&up, &da, sizeof(up));
+       up = UNCONST(fr_dict_attr_t *, da);
 
        /*
         *      Add the pairs method to the main table, this allows
index 400f280bf810e9bab6b14c8a48417d8d4a776d2a..5670f6cc65044d1b7f74669845141c728c1d6401 100644 (file)
@@ -825,13 +825,7 @@ static char *python_path_build(TALLOC_CTX *ctx, rlm_python_t *inst, CONF_SECTION
                MEM(path = talloc_asprintf_append_buffer(path, "%s:", inst->python_path));
        }
        if (inst->python_path_include_conf_dir) {
-               char const *imutable;
-               char *mutable;
-
-               imutable = cf_filename(conf);
-               memcpy(&mutable, &imutable, sizeof(mutable));
-
-               MEM(path = talloc_asprintf_append_buffer(path, "%s:", dirname(mutable)));
+               MEM(path = talloc_asprintf_append_buffer(path, "%s:", dirname(UNCONST(char *, cf_filename(conf)))));
        }
        if (inst->python_path_include_default) {
                MEM(path = talloc_asprintf_append_buffer(path, "%s:", default_path));
index d59e6f330e6f82efa9c0fdcfeb542adef5cfefb0..a52b89e3941297527e6acbe575a0b2562fed8d52 100644 (file)
@@ -80,34 +80,23 @@ static sql_rcode_t sql_socket_init(rlm_sql_handle_t *handle, rlm_sql_config_t *c
        /* Not suported ? */
        SQLSetConnectAttr(conn->dbc_handle, SQL_ATTR_LOGIN_TIMEOUT, &timeout_ms, SQL_IS_UINTEGER);
 #endif
+
        /*
-        *      The db2 API doesn't qualify arguments as const even when they should be.
+        *      We probably want to use SQLDriverConnect, which connects
+        *      to a remote server.
+        *
+        *      http://www.ibm.com/support/knowledgecenter/SSEPGG_10.5.0/com.ibm.db2.luw.apdv.cli.doc/doc/r0000584.html
+        *      http://stackoverflow.com/questions/27167070/connection-string-to-a-remote-db2-db-in-another-server
+        *
+        *      And probably synthesise the retarded connection string ourselves,
+        *      probably via config file expansions:
+        *
+        *      Driver={IBM DB2 ODBC Driver};Database=testDb;Hostname=remoteHostName.com;UID=username;PWD=mypasswd;PORT=50000
         */
-       {
-               SQLCHAR *server, *login, *password;
-
-               memcpy(&server, &config->sql_server, sizeof(server));
-               memcpy(&login, &config->sql_login, sizeof(login));
-               memcpy(&password, &config->sql_password, sizeof(password));
-
-               /*
-                *      We probably want to use SQLDriverConnect, which connects
-                *      to a remote server.
-                *
-                *      http://www.ibm.com/support/knowledgecenter/SSEPGG_10.5.0/com.ibm.db2.luw.apdv.cli.doc/doc/r0000584.html
-                *      http://stackoverflow.com/questions/27167070/connection-string-to-a-remote-db2-db-in-another-server
-                *
-                *      And probably synthesis the retarded connection string ourselves,
-                *      probably via config file expansions:
-                *
-                *      Driver={IBM DB2 ODBC Driver};Database=testDb;Hostname=remoteHostName.com;UID=username;PWD=mypasswd;PORT=50000
-                */
-               row = SQLConnect(conn->dbc_handle,
-                                   server, SQL_NTS,
-                                   login, SQL_NTS,
-                                   password, SQL_NTS);
-       }
-
+       row = SQLConnect(conn->dbc_handle,
+                        UNCONST(SQLCHAR *, config->sql_server), SQL_NTS,
+                        UNCONST(SQLCHAR *, config->sql_login), SQL_NTS,
+                        UNCONST(SQLCHAR *, config->sql_password), SQL_NTS);
        if (row != SQL_SUCCESS) {
                ERROR("could not connect to DB2 server %s", config->sql_server);
 
index 86da2e3a1ba3abdbea4ab98f6b1d73b1720e5869..9492abcbdcaad87ca6fefe893c94f6b75e4f0e09 100644 (file)
@@ -750,20 +750,17 @@ static sql_rcode_t sql_socket_init(rlm_sql_handle_t *handle, rlm_sql_config_t *c
         *      Set User and Password properties for the db
         */
        {
-               CS_VOID *login, *password;
-               CS_CHAR *server;
                char database[128];
 
-               memcpy(&login, &config->sql_login, sizeof(login));
-               if (ct_con_props(conn->db, CS_SET, CS_USERNAME, login, strlen(config->sql_login), NULL) != CS_SUCCEED) {
+               if (ct_con_props(conn->db, CS_SET, CS_USERNAME,
+                                UNCONST(CS_VOID *, config->sql_login), strlen(config->sql_login), NULL) != CS_SUCCEED) {
                        ERROR("unable to set username for db");
 
                        goto error;
                }
 
-               memcpy(&password, &config->sql_password, sizeof(password));
                if (ct_con_props(conn->db, CS_SET, CS_PASSWORD,
-                                password, strlen(config->sql_password), NULL) != CS_SUCCEED) {
+                                UNCONST(CS_VOID *, config->sql_password), strlen(config->sql_password), NULL) != CS_SUCCEED) {
                        ERROR("unable to set password for db");
 
                        goto error;
@@ -772,8 +769,7 @@ static sql_rcode_t sql_socket_init(rlm_sql_handle_t *handle, rlm_sql_config_t *c
                /*
                 *      Connect to the database
                 */
-               memcpy(&server, &config->sql_server, sizeof(server));
-               if (ct_connect(conn->db, server, strlen(config->sql_server)) != CS_SUCCEED) {
+               if (ct_connect(conn->db, UNCONST(CS_CHAR *, config->sql_server), strlen(config->sql_server)) != CS_SUCCEED) {
                        ERROR("unable to establish db to symbolic servername %s",
                              config->sql_server);
 
index 97d38bc42f892dd2b918efe6216d78c49d1698cc..115c86211d97427a665a9df492565f065ca0dc4e 100644 (file)
@@ -247,12 +247,8 @@ static sql_rcode_t sql_fields(char const **out[], rlm_sql_handle_t *handle, rlm_
 
 static sql_rcode_t sql_query(rlm_sql_handle_t *handle, rlm_sql_config_t *config, char const *query)
 {
-       int status;
-       rlm_sql_oracle_conn_t *conn = handle->conn;
-
-       OraText *oracle_query;
-
-       memcpy(&oracle_query, &query, sizeof(oracle_query));
+       int                     status;
+       rlm_sql_oracle_conn_t   *conn = handle->conn;
 
        if (!conn->ctx) {
                ERROR("Socket not connected");
@@ -260,7 +256,7 @@ static sql_rcode_t sql_query(rlm_sql_handle_t *handle, rlm_sql_config_t *config,
                return RLM_SQL_RECONNECT;
        }
 
-       if (OCIStmtPrepare(conn->query, conn->error, oracle_query, strlen(query),
+       if (OCIStmtPrepare(conn->query, conn->error, UNCONST(OraText *, query), strlen(query),
                           OCI_NTV_SYNTAX, OCI_DEFAULT)) {
                ERROR("prepare failed in sql_query");
 
@@ -294,13 +290,9 @@ static sql_rcode_t sql_select_query(rlm_sql_handle_t *handle, rlm_sql_config_t *
 
        sb2             *ind;
 
-       OraText         *oracle_query;
-
        rlm_sql_oracle_conn_t *conn = handle->conn;
 
-       memcpy(&oracle_query, &query, sizeof(oracle_query));
-
-       if (OCIStmtPrepare(conn->query, conn->error, oracle_query, strlen(query), OCI_NTV_SYNTAX,
+       if (OCIStmtPrepare(conn->query, conn->error, UNCONST(OraText *, query), strlen(query), OCI_NTV_SYNTAX,
                           OCI_DEFAULT)) {
                ERROR("prepare failed in sql_select_query");
 
index 7ebc56d054076691afcdfce52193f62b6a89516b..c2a414d25723132fa675ac0ae23cc39ccf99734f 100644 (file)
@@ -97,17 +97,10 @@ static sql_rcode_t sql_socket_init(rlm_sql_handle_t *handle, rlm_sql_config_t *c
        SQLSetConnectAttr(conn->dbc, SQL_ATTR_LOGIN_TIMEOUT, &timeout_ms, SQL_IS_UINTEGER);
 
        /* 3. Connect to the datasource */
-       {
-               SQLCHAR *odbc_server, *odbc_login, *odbc_password;
-
-               memcpy(&odbc_server, &config->sql_server, sizeof(odbc_server));
-               memcpy(&odbc_login, &config->sql_login, sizeof(odbc_login));
-               memcpy(&odbc_password, &config->sql_password, sizeof(odbc_password));
-               err_handle = SQLConnect(conn->dbc,
-                                       odbc_server, strlen(config->sql_server),
-                                       odbc_login, strlen(config->sql_login),
-                                       odbc_password, strlen(config->sql_password));
-       }
+       err_handle = SQLConnect(conn->dbc,
+                               UNCONST(SQLCHAR *, config->sql_server), strlen(config->sql_server),
+                               UNCONST(SQLCHAR *, config->sql_login), strlen(config->sql_login),
+                               UNCONST(SQLCHAR *, config->sql_password), strlen(config->sql_password));
 
        if (sql_check_error(err_handle, handle, config)) {
                ERROR("Connection failed");
@@ -131,12 +124,7 @@ static sql_rcode_t sql_query(rlm_sql_handle_t *handle, rlm_sql_config_t *config,
        int state;
 
        /* Executing query */
-       {
-               SQLCHAR *odbc_query;
-
-               memcpy(&odbc_query, &query, sizeof(odbc_query));
-               err_handle = SQLExecDirect(conn->stmt, odbc_query, strlen(query));
-       }
+       err_handle = SQLExecDirect(conn->stmt, UNCONST(SQLCHAR *, query), strlen(query));
        if ((state = sql_check_error(err_handle, handle, config))) {
                if(state == RLM_SQL_RECONNECT) {
                        DEBUG("rlm_sql will attempt to reconnect");
index 52170041a12092c598c50694a4dec3e8ff67f0de..16e9d16f291aa16cab340b922f7862daf5d36771 100644 (file)
@@ -402,13 +402,8 @@ static int mod_instantiate(void *instance, CONF_SECTION *conf)
        if (res) goto error;
 
        /* Now load the config file, which can override gleaned settings. */
-       {
-               char *file;
-
-               memcpy(&file, &inst->filename, sizeof(file));
-               res = ub_ctx_config(inst->ub, file);
-               if (res) goto error;
-       }
+       res = ub_ctx_config(inst->ub, UNCONST(char *, inst->filename));
+       if (res) goto error;
 
        if (unbound_log_init(inst, &inst->u_log, inst->ub) < 0) goto error;
 
index 110ef8cffc53a0ece68c41d5dee8405c324a0478..4d4ac86faf1a814ab0dc4e38853d2adb2e46be38 100644 (file)
@@ -48,11 +48,8 @@ void request_verify(UNUSED char const *file, UNUSED int line, UNUSED request_t *
 
 int talloc_const_free(void const *ptr)
 {
-       void *tmp;
        if (!ptr) return 0;
-
-       memcpy(&tmp, &ptr, sizeof(tmp));
-       return talloc_free(tmp);
+       return talloc_free(UNCONST(void *, ptr));
 }
 /**********************************************************************/
 
index baaaaa743263ecedccc4f7b23074ff26fa033ccf..e6e9d4f5f63be0100965377471c5a5264c86cfbf 100644 (file)
@@ -64,11 +64,8 @@ void request_verify(UNUSED char const *file, UNUSED int line, UNUSED request_t c
 
 int talloc_const_free(void const *ptr)
 {
-       void *tmp;
        if (!ptr) return 0;
-
-       memcpy(&tmp, &ptr, sizeof(tmp));
-       return talloc_free(tmp);
+       return talloc_free(UNCONST(void *, ptr));
 }
 /**********************************************************************/
 
index eb6bd29b8554b2a591b7936686411c1f874ad50a..ffe4fedea666823b04e91258a11535f1d14fc228 100644 (file)
@@ -66,11 +66,8 @@ void request_verify(UNUSED char const *file, UNUSED int line, UNUSED request_t *
 
 int talloc_const_free(void const *ptr)
 {
-       void *tmp;
        if (!ptr) return 0;
-
-       memcpy(&tmp, &ptr, sizeof(tmp));
-       return talloc_free(tmp);
+       return talloc_free(UNCONST(void *, ptr));
 }
 /**********************************************************************/
 
index 2c6e5bbee36d8701ae51390d310fed49582efb3b..96a4dc176d05009f082f6020418cbeed538b0add 100644 (file)
@@ -78,11 +78,8 @@ void request_verify(UNUSED char const *file, UNUSED int line, UNUSED request_t *
 
 int talloc_const_free(void const *ptr)
 {
-       void *tmp;
        if (!ptr) return 0;
-
-       memcpy(&tmp, &ptr, sizeof(tmp));
-       return talloc_free(tmp);
+       return talloc_free(UNCONST(void *, ptr));
 }
 /**********************************************************************/
 
index 620d120b839220c0af2a16a0ddc2950330fd9739..0268faec0c22b7954c0673a08371dcba694bb6d7 100644 (file)
@@ -61,11 +61,8 @@ void request_verify(UNUSED char const *file, UNUSED int line, UNUSED request_t *
 
 int talloc_const_free(void const *ptr)
 {
-       void *tmp;
        if (!ptr) return 0;
-
-       memcpy(&tmp, &ptr, sizeof(tmp));
-       return talloc_free(tmp);
+       return talloc_free(UNCONST(void *, ptr));
 }
 /**********************************************************************/
 
index ca8164d5fe93c2adfd5515c0ade25d33c59ba7a0..b50f341f87158d621c4c1339c1f772f349001d16 100644 (file)
@@ -78,11 +78,8 @@ void request_verify(UNUSED char const *file, UNUSED int line, UNUSED request_t c
 
 int talloc_const_free(void const *ptr)
 {
-       void *tmp;
        if (!ptr) return 0;
-
-       memcpy(&tmp, &ptr, sizeof(tmp));
-       return talloc_free(tmp);
+       return talloc_free(UNCONST(void *, ptr));
 }
 /**********************************************************************/