From: Stefan Fritsch Date: Sun, 27 Nov 2011 20:28:59 +0000 (+0000) Subject: Merge r1206827: X-Git-Tag: 2.3.16~91 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=bab616c9a22aba66186c873fe75684bd46eb051e;p=apache Merge r1206827: 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/branches/2.4.x@1206832 13f79535-47bb-0310-9956-ffa450edef68 --- 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);