r19873: Make sure we are privileged when doing DMAPI operations on systems
authorJames Peach <jpeach@samba.org>
Fri, 24 Nov 2006 05:35:05 +0000 (05:35 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:16:03 +0000 (12:16 -0500)
that don't have capability support. Patch by J Raynor <raynorj@mn.rr.com>.
(This used to be commit 53fe047f35534afc4b56fcbaf135a3ca13df65bd)

source3/smbd/dmapi.c

index a9d83c782bb7fd4c33ccdafe1d419e0453f65b89..b42b7d51f018391659b38d5eceb7d62c1a1d9c5b 100644 (file)
@@ -240,6 +240,13 @@ uint32 dmapi_file_flags(const char * const path)
                }
        }
 
+       /* AIX has DMAPI but no POSIX capablities support. In this case,
+        * we need to be root to do DMAPI manipulations.
+        */
+#ifndef HAVE_POSIX_CAPABILITIES
+       become_root();
+#endif
+
        err = dm_path_to_handle(CONST_DISCARD(char *, path),
                &dm_handle, &dm_handle_len);
        if (err < 0) {
@@ -247,7 +254,7 @@ uint32 dmapi_file_flags(const char * const path)
                            path, strerror(errno)));
 
                if (errno != EPERM) {
-                       return 0;
+                       goto done;
                }
 
                /* Linux capabilities are broken in that changing our
@@ -265,7 +272,7 @@ uint32 dmapi_file_flags(const char * const path)
                        DEBUG(DMAPI_TRACE,
                            ("retrying dm_path_to_handle(%s): %s\n",
                            path, strerror(errno)));
-                       return 0;
+                       goto done;
                }
        }
 
@@ -275,7 +282,7 @@ uint32 dmapi_file_flags(const char * const path)
                DEBUG(DMAPI_TRACE, ("dm_get_eventlist(%s): %s\n",
                            path, strerror(errno)));
                dm_handle_free(dm_handle, dm_handle_len);
-               return 0;
+               goto done;
        }
 
        /* We figure that the only reason a DMAPI application would be
@@ -294,6 +301,12 @@ uint32 dmapi_file_flags(const char * const path)
                DEBUG(DMAPI_TRACE, ("%s is OFFLINE\n", path));
        }
 
+done:
+
+#ifndef HAVE_POSIX_CAPABILITIES
+       unbecome_root();
+#endif
+
        return flags;
 }