]> granicus.if.org Git - apache/commitdiff
Merge r1206827:
authorStefan Fritsch <sf@apache.org>
Sun, 27 Nov 2011 20:28:59 +0000 (20:28 +0000)
committerStefan Fritsch <sf@apache.org>
Sun, 27 Nov 2011 20:28:59 +0000 (20:28 +0000)
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

modules/cache/mod_socache_dbm.c

index 132a50806ac36594f57588b7d10bcd2c6b8a50a3..7ac48f46c7222560d2a989d48167c464c51feeea 100644 (file)
@@ -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);