From 5ff1c3c5a12930692cb6284d14f7fda3a974af8e Mon Sep 17 00:00:00 2001 From: Pavel Březina Date: Tue, 22 Jan 2013 14:31:37 +0100 Subject: sudo responder: change num_rules type from size_t to uint32_t https://fedorahosted.org/sssd/ticket/1779 2^32 should be enough to store sudo rules. size_t type was causing troubles on big endian architectures, because it wasn't used correctly in combination with D-Bus. --- src/db/sysdb_sudo.c | 6 +++--- src/db/sysdb_sudo.h | 4 ++-- src/responder/sudo/sudosrv_cmd.c | 2 +- src/responder/sudo/sudosrv_dp.c | 10 +++++----- src/responder/sudo/sudosrv_get_sudorules.c | 14 +++++++------- src/responder/sudo/sudosrv_private.h | 8 ++++---- src/responder/sudo/sudosrv_query.c | 6 +++--- 7 files changed, 25 insertions(+), 25 deletions(-) diff --git a/src/db/sysdb_sudo.c b/src/db/sysdb_sudo.c index 93dea85c0..d6cc3eae5 100644 --- a/src/db/sysdb_sudo.c +++ b/src/db/sysdb_sudo.c @@ -174,13 +174,13 @@ done: } errno_t sysdb_sudo_filter_rules_by_time(TALLOC_CTX *mem_ctx, - size_t in_num_rules, + uint32_t in_num_rules, struct sysdb_attrs **in_rules, time_t now, - size_t *_num_rules, + uint32_t *_num_rules, struct sysdb_attrs ***_rules) { - size_t num_rules = 0; + uint32_t num_rules = 0; struct sysdb_attrs **rules = NULL; TALLOC_CTX *tmp_ctx = NULL; bool allowed = false; diff --git a/src/db/sysdb_sudo.h b/src/db/sysdb_sudo.h index da0192409..7a34591cd 100644 --- a/src/db/sysdb_sudo.h +++ b/src/db/sysdb_sudo.h @@ -60,10 +60,10 @@ | SYSDB_SUDO_FILTER_NGRS errno_t sysdb_sudo_filter_rules_by_time(TALLOC_CTX *mem_ctx, - size_t in_num_rules, + uint32_t in_num_rules, struct sysdb_attrs **in_rules, time_t now, - size_t *_num_rules, + uint32_t *_num_rules, struct sysdb_attrs ***_rules); errno_t diff --git a/src/responder/sudo/sudosrv_cmd.c b/src/responder/sudo/sudosrv_cmd.c index 9ad1be42b..ee25b53d1 100644 --- a/src/responder/sudo/sudosrv_cmd.c +++ b/src/responder/sudo/sudosrv_cmd.c @@ -98,7 +98,7 @@ errno_t sudosrv_cmd_done(struct sudo_cmd_ctx *cmd_ctx, int ret) { uint8_t *response_body = NULL; size_t response_len = 0; - size_t num_rules = cmd_ctx->num_rules; + uint32_t num_rules = cmd_ctx->num_rules; struct sysdb_attrs **rules = cmd_ctx->rules; switch (ret) { diff --git a/src/responder/sudo/sudosrv_dp.c b/src/responder/sudo/sudosrv_dp.c index 208606c26..3cd8fe8d8 100644 --- a/src/responder/sudo/sudosrv_dp.c +++ b/src/responder/sudo/sudosrv_dp.c @@ -37,7 +37,7 @@ struct sss_dp_get_sudoers_info { bool fast_reply; enum sss_dp_sudo_type type; const char *name; - size_t num_rules; + uint32_t num_rules; struct sysdb_attrs **rules; }; @@ -51,7 +51,7 @@ sss_dp_get_sudoers_send(TALLOC_CTX *mem_ctx, bool fast_reply, enum sss_dp_sudo_type type, const char *name, - size_t num_rules, + uint32_t num_rules, struct sysdb_attrs **rules) { struct tevent_req *req; @@ -82,7 +82,7 @@ sss_dp_get_sudoers_send(TALLOC_CTX *mem_ctx, switch (info->type) { case SSS_DP_SUDO_REFRESH_RULES: key = talloc_asprintf(state, "%d:%u:%s@%s", type, - (unsigned int)num_rules, name, dom->name); + num_rules, name, dom->name); break; case SSS_DP_SUDO_FULL_REFRESH: key = talloc_asprintf(state, "%d:%s", type, dom->name); @@ -122,7 +122,7 @@ sss_dp_get_sudoers_msg(void *pvt) struct sss_dp_get_sudoers_info *info; uint32_t be_type = 0; const char *rule_name = NULL; - int i; + uint32_t i; info = talloc_get_type(pvt, struct sss_dp_get_sudoers_info); @@ -151,7 +151,7 @@ sss_dp_get_sudoers_msg(void *pvt) /* create the message */ DEBUG(SSSDBG_TRACE_FUNC, ("Creating SUDOers request for [%s][%u][%s][%u]\n", - info->dom->name, be_type, info->name, (unsigned int)info->num_rules)); + info->dom->name, be_type, info->name, info->num_rules)); dbus_message_iter_init_append(msg, &iter); diff --git a/src/responder/sudo/sudosrv_get_sudorules.c b/src/responder/sudo/sudosrv_get_sudorules.c index a8e866661..8d7480bec 100644 --- a/src/responder/sudo/sudosrv_get_sudorules.c +++ b/src/responder/sudo/sudosrv_get_sudorules.c @@ -320,7 +320,7 @@ done: static errno_t sudosrv_get_sudorules_from_cache(TALLOC_CTX *mem_ctx, struct sudo_cmd_ctx *cmd_ctx, struct sysdb_attrs ***_rules, - size_t *_num_rules); + uint32_t *_num_rules); static void sudosrv_get_sudorules_dp_callback(uint16_t err_maj, uint32_t err_min, const char *err_msg, void *ptr); @@ -337,7 +337,7 @@ static errno_t sudosrv_get_sudorules_query_cache(TALLOC_CTX *mem_ctx, uid_t uid, char **groupnames, struct sysdb_attrs ***_rules, - size_t *_count); + uint32_t *_count); errno_t sudosrv_get_rules(struct sudo_cmd_ctx *cmd_ctx) { @@ -347,7 +347,7 @@ errno_t sudosrv_get_rules(struct sudo_cmd_ctx *cmd_ctx) struct sysdb_ctx *user_sysdb = NULL; struct sysdb_ctx *rules_sysdb = NULL; char **groupnames = NULL; - size_t expired_rules_num = 0; + uint32_t expired_rules_num = 0; struct sysdb_attrs **expired_rules = NULL; errno_t ret; unsigned int flags = SYSDB_SUDO_FILTER_NONE; @@ -565,7 +565,7 @@ sudosrv_get_sudorules_dp_callback(uint16_t err_maj, uint32_t err_min, static errno_t sudosrv_get_sudorules_from_cache(TALLOC_CTX *mem_ctx, struct sudo_cmd_ctx *cmd_ctx, struct sysdb_attrs ***_rules, - size_t *_num_rules) + uint32_t *_num_rules) { TALLOC_CTX *tmp_ctx; errno_t ret; @@ -575,7 +575,7 @@ static errno_t sudosrv_get_sudorules_from_cache(TALLOC_CTX *mem_ctx, const char *debug_name = NULL; unsigned int flags = SYSDB_SUDO_FILTER_NONE; struct sysdb_attrs **rules = NULL; - size_t num_rules = 0; + uint32_t num_rules = 0; const char *attrs[] = { SYSDB_OBJECTCLASS, SYSDB_SUDO_CACHE_AT_CN, SYSDB_SUDO_CACHE_AT_USER, @@ -676,7 +676,7 @@ static errno_t sudosrv_get_sudorules_query_cache(TALLOC_CTX *mem_ctx, uid_t uid, char **groupnames, struct sysdb_attrs ***_rules, - size_t *_count) + uint32_t *_count) { TALLOC_CTX *tmp_ctx; char *filter; @@ -727,7 +727,7 @@ static errno_t sudosrv_get_sudorules_query_cache(TALLOC_CTX *mem_ctx, } *_rules = talloc_steal(mem_ctx, rules); - *_count = count; + *_count = (uint32_t)count; ret = EOK; done: diff --git a/src/responder/sudo/sudosrv_private.h b/src/responder/sudo/sudosrv_private.h index 9d3156ca1..71a272ab4 100644 --- a/src/responder/sudo/sudosrv_private.h +++ b/src/responder/sudo/sudosrv_private.h @@ -62,11 +62,11 @@ struct sudo_cmd_ctx { struct sss_domain_info *domain; bool check_next; - size_t expired_rules_num; + uint32_t expired_rules_num; /* output data */ struct sysdb_attrs **rules; - size_t num_rules; + uint32_t num_rules; }; struct sudo_dom_ctx { @@ -101,7 +101,7 @@ errno_t sudosrv_parse_query_recv(TALLOC_CTX *mem_ctx, errno_t sudosrv_build_response(TALLOC_CTX *mem_ctx, uint32_t error, - int rules_num, + uint32_t rules_num, struct sysdb_attrs **rules, uint8_t **_response_body, size_t *_response_len); @@ -113,7 +113,7 @@ sss_dp_get_sudoers_send(TALLOC_CTX *mem_ctx, bool fast_reply, enum sss_dp_sudo_type type, const char *name, - size_t num_rules, + uint32_t num_rules, struct sysdb_attrs **rules); errno_t diff --git a/src/responder/sudo/sudosrv_query.c b/src/responder/sudo/sudosrv_query.c index 1574104cb..a8501df56 100644 --- a/src/responder/sudo/sudosrv_query.c +++ b/src/responder/sudo/sudosrv_query.c @@ -188,7 +188,7 @@ done: */ errno_t sudosrv_build_response(TALLOC_CTX *mem_ctx, uint32_t error, - int rules_num, + uint32_t rules_num, struct sysdb_attrs **rules, uint8_t **_response_body, size_t *_response_len) @@ -196,7 +196,7 @@ errno_t sudosrv_build_response(TALLOC_CTX *mem_ctx, uint8_t *response_body = NULL; size_t response_len = 0; TALLOC_CTX *tmp_ctx = NULL; - int i = 0; + uint32_t i = 0; errno_t ret = EOK; tmp_ctx = talloc_new(NULL); @@ -225,7 +225,7 @@ errno_t sudosrv_build_response(TALLOC_CTX *mem_ctx, } /* rules count */ - ret = sudosrv_response_append_uint32(tmp_ctx, (uint32_t)rules_num, + ret = sudosrv_response_append_uint32(tmp_ctx, rules_num, &response_body, &response_len); if (ret != EOK) { goto fail; -- cgit