From 3c0136afce79f8e372195850625ab12f18fb02f6 Mon Sep 17 00:00:00 2001 From: Stefan Fritsch Date: Sun, 27 Nov 2011 20:26:49 +0000 Subject: [PATCH] Fix some warn_unused_result compiler warnings by checking the return code of chown and logging an error if the error was not ENOENT. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1206827 13f79535-47bb-0310-9956-ffa450edef68 --- modules/cache/mod_socache_dbm.c | 39 ++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/modules/cache/mod_socache_dbm.c b/modules/cache/mod_socache_dbm.c index 132a50806a..7ac48f46c7 100644 --- a/modules/cache/mod_socache_dbm.c +++ b/modules/cache/mod_socache_dbm.c @@ -95,6 +95,23 @@ static const char *socache_dbm_create(ap_socache_instance_t **context, return NULL; } +static int try_chown(apr_pool_t *p, server_rec *s, + const char *name, const char *suffix) +{ + if (suffix) + name = apr_pstrcat(p, name, suffix, NULL); + if (-1 == chown(name, ap_unixd_config.user_id, + (gid_t)-1 /* no gid change */ )) + { + if (errno != ENOENT) + ap_log_error(APLOG_MARK, APLOG_ERR, APR_FROM_OS_ERROR(errno), s, + "Can't change owner of %s", name); + return -1; + } + return 0; +} + + static apr_status_t socache_dbm_init(ap_socache_instance_t *ctx, const char *namespace, const struct ap_socache_hints *hints, @@ -140,21 +157,13 @@ static apr_status_t socache_dbm_init(ap_socache_instance_t *ctx, * cannot exactly determine the suffixes we try all possibilities. */ if (geteuid() == 0 /* is superuser */) { - chown(ctx->data_file, ap_unixd_config.user_id, -1 /* no gid change */); - if (chown(apr_pstrcat(p, ctx->data_file, DBM_FILE_SUFFIX_DIR, NULL), - ap_unixd_config.user_id, -1) == -1) { - if (chown(apr_pstrcat(p, ctx->data_file, ".db", NULL), - ap_unixd_config.user_id, -1) == -1) - chown(apr_pstrcat(p, ctx->data_file, ".dir", NULL), - ap_unixd_config.user_id, -1); - } - if (chown(apr_pstrcat(p, ctx->data_file, DBM_FILE_SUFFIX_PAG, NULL), - ap_unixd_config.user_id, -1) == -1) { - if (chown(apr_pstrcat(p, ctx->data_file, ".db", NULL), - ap_unixd_config.user_id, -1) == -1) - chown(apr_pstrcat(p, ctx->data_file, ".pag", NULL), - ap_unixd_config.user_id, -1); - } + try_chown(p, s, ctx->data_file, NULL); + if (try_chown(p, s, ctx->data_file, DBM_FILE_SUFFIX_DIR)) + if (try_chown(p, s, ctx->data_file, ".db")) + try_chown(p, s, ctx->data_file, ".dir"); + if (try_chown(p, s, ctx->data_file, DBM_FILE_SUFFIX_PAG)) + if (try_chown(p, s, ctx->data_file, ".db")) + try_chown(p, s, ctx->data_file, ".pag"); } #endif socache_dbm_expire(ctx, s); -- 2.40.0