Commit 4559f696 authored by Stefan Fritsch's avatar Stefan Fritsch
Browse files

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
parent f2494498
Loading
Loading
Loading
Loading
+24 −15
Changes for modules/cache/mod_socache_dbm.c: 24 added lines, 15 removed lines.
Original line number Diff line number Diff line
@@ -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);