s4-provision: Give better clues on what Samba needs for s3fs ACL support
authorAndrew Bartlett <abartlet@samba.org>
Thu, 21 Jun 2012 06:21:54 +0000 (16:21 +1000)
committerAndrew Bartlett <abartlet@samba.org>
Thu, 21 Jun 2012 12:07:55 +0000 (14:07 +0200)
Autobuild-User(master): Andrew Bartlett <abartlet@samba.org>
Autobuild-Date(master): Thu Jun 21 14:07:55 CEST 2012 on sn-devel-104

source3/smbd/pysmbd.c
source4/scripting/python/samba/provision/__init__.py

index 76167e1477824baa94e43f6152a29d24aa37b492..5badb3a74450b56decbaba9f30807de50d2da6ae 100644 (file)
@@ -183,7 +183,22 @@ static PyObject *py_smbd_set_simple_acl(PyObject *self, PyObject *args)
        Py_RETURN_NONE;
 }
 
+/*
+  check if we have ACL support
+ */
+static PyObject *py_smbd_have_posix_acls(PyObject *self, PyObject *args)
+{
+#ifdef HAVE_POSIX_ACLS
+       return PyBool_FromLong(true);
+#else
+       return PyBool_FromLong(false);
+#endif
+}
+
 static PyMethodDef py_smbd_methods[] = {
+       { "have_posix_acls",
+               (PyCFunction)py_smbd_have_posix_acls, METH_VARARGS,
+               NULL },
        { "set_simple_acl",
                (PyCFunction)py_smbd_set_simple_acl, METH_VARARGS,
                NULL },
index c95db4e6393ed1879242d5f3660f8013a51e072a..d9d1ce9eab4c902eff3974e9600f95c4bd0c788e 100644 (file)
@@ -1738,12 +1738,18 @@ def provision(logger, session_info, credentials, smbconf=None,
         if paths.sysvol is None:
             raise MissingShareError("sysvol", paths.smbconf)
 
+        if not smbd.have_posix_acls():
+            # This clue is only strictly correct for RPM and
+            # Debian-like Linux systems, but hopefully other users
+            # will get enough clue from it.
+            raise ProvisioningError("Samba was compiled without the posix ACL support that s3fs requires.  Try installing libacl1-dev or libacl-devel, then re-run configure and make.")
+            
         file = tempfile.NamedTemporaryFile(dir=os.path.abspath(paths.sysvol))
         try:
             try:
                 smbd.set_simple_acl(file.name, root_uid, wheel_gid)
             except Exception:
-                raise ProvisioningError("Your filesystem or build does not support posix ACLs, s3fs is unworkable in this mode")
+                raise ProvisioningError("Your filesystem or build does not support posix ACLs, which s3fs requires.  Try the mounting the filesystem with the 'acl' option.")
         finally:
             file.close()