udisks2 and ACLs

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I notice that udisks-1.99.0 depends unconditionally on ACLs (for handling permissions under /run/media). Since ACLs are kinda redundant on personal laptop and desktop systems it would be nice if this dependency were optional.

I'm attaching a patch to udisks' udiskslinuxfilesystem.c which calls chown() if ACLs are not available. Since I'm not an automake guy I'm not sure how to revise the configure script, but the idea is that you should be able to do

--disable-acl

with the effect that ENABLE_ACL is not defined (otherwise it is defined). And config.h.in should have added:

/* Enable ACLs */
#undef ENABLE_ACL

--
Allin Cottrell
Department of Economics
Wake Forest University, NC
--- udiskslinuxfilesystem.c.orig	2012-08-30 13:22:17.975670390 -0400
+++ udiskslinuxfilesystem.c	2012-09-05 09:15:01.755412910 -0400
@@ -29,7 +29,9 @@
 #include <stdio.h>
 #include <mntent.h>
 #include <sys/types.h>
+#ifdef ENABLE_ACL
 #include <sys/acl.h>
+#endif
 #include <errno.h>
 
 #include <glib/gstdio.h>
@@ -781,10 +783,13 @@
 
 /* ---------------------------------------------------------------------------------------------------- */
 
+#ifdef ENABLE_ACL
+
 static gboolean
-add_acl (const gchar  *path,
-         uid_t         uid,
-         GError      **error)
+add_user_permission (const gchar  *path,
+                     uid_t         uid,
+                     gid_t         gid,
+                     GError      **error)
 {
   gboolean ret = FALSE;
   acl_t acl = NULL;
@@ -817,6 +822,34 @@
   return ret;
 }
 
+#else
+
+static gboolean
+add_user_permission (const gchar  *path,
+                     uid_t         uid,
+                     gid_t         gid,
+                     GError      **error)
+{
+  gboolean ret = FALSE;
+
+  if (chown(path, uid, gid) != 0)
+    {
+      g_set_error (error,
+                   G_IO_ERROR,
+                   g_io_error_from_errno (errno),
+                   "Giving ownership to uid %d for `%s' failed: %m",
+                   (gint) uid, path);
+    }
+  else 
+    {
+      ret = TRUE;
+    }
+
+  return ret;
+}
+
+#endif /* ENABLE_ACL or not */
+
 /*
  * calculate_mount_point: <internal>
  * @dameon: A #UDisksDaemon.
@@ -888,8 +921,8 @@
                            mount_dir);
               goto out;
             }
-          /* Finally, add the read+execute ACL for $USER */
-          if (!add_acl (mount_dir, uid, error))
+          /* Finally, add the read+execute ACL for $USER (or chown) */
+          if (!add_user_permission (mount_dir, uid, gid, error))
             {
               if (rmdir (mount_dir) != 0)
                 udisks_warning ("Error calling rmdir() on %s: %m", mount_dir);

[Index of Archives]     [Linux Kernel]     [Linux DVB]     [Asterisk Internet PBX]     [DCCP]     [Netdev]     [X.org]     [Util Linux NG]     [Fedora Women]     [ALSA Devel]     [Linux USB]

  Powered by Linux