[PATCH v2] allow disabling ACL

David Heidelberger david.heidelberger at ixit.cz
Thu Mar 27 13:41:06 PDT 2014


This patch provide option to build and run udisks without ACL.
Tested in full desktop environment.

Signed-off-by: David Heidelberger <david.heidelberger at ixit.cz>

v2: as replacement of ACL is used chown call.
---
  configure.ac                | 38 ++++++++++++++++++++++++++------------
  src/udiskslinuxfilesystem.c | 10 ++++++++--
  2 files changed, 34 insertions(+), 14 deletions(-)

diff --git a/configure.ac b/configure.ac
index 3a39b5a..e656abf 100644
--- a/configure.ac
+++ b/configure.ac
@@ -174,18 +174,31 @@ if test "x$with_systemdsystemunitdir" != "xno"; 
then
  fi
  AM_CONDITIONAL(HAVE_SYSTEMD, [test -n "$systemdsystemunitdir"])

-# libacl
-AC_CHECK_HEADERS(
-        [sys/acl.h acl/libacl.h],
-        [ACL_CFLAGS=""],
-        AC_MSG_ERROR([*** ACL headers not found.]))
-AC_CHECK_LIB(
-        [acl],
-        [acl_get_file],
-        [ACL_LIBS="-lacl"],
-        AC_MSG_ERROR([*** libacl not found.]))
-AC_SUBST(ACL_CFLAGS)
-AC_SUBST(ACL_LIBS)
+have_acl=no
+AC_ARG_ENABLE(acl, AS_HELP_STRING([--disable-acl], [disable acl 
support]))
+if test "x$enable_acl" != "xno"; then
+  AC_CHECK_HEADERS(
+          [sys/acl.h acl/libacl.h],
+          [
+            AC_CHECK_LIB(
+                [acl],
+                [acl_get_file],
+                [AC_DEFINE(HAVE_ACL, 1, [Define if libacl is 
available]) have_acl=yes],
+                have_acl=no)
+          ],
+          have_acl=no)
+  if test "x$have_acl" = "xyes"; then
+    ACL_CFLAGS=""
+    ACL_LIBS="-lacl"
+  fi
+  AC_SUBST(ACL_CFLAGS)
+  AC_SUBST(ACL_LIBS)
+  if test "x$have_acl" = xno -a "x$enable_acl" = xyes; then
+    AC_MSG_ERROR([acl support requested but libraries not found])
+  fi
+fi
+AM_CONDITIONAL(HAVE_ACL, [test "$have_acl" = "yes"])
+

  # Internationalization
  #
@@ -232,6 +245,7 @@ echo "
          udevdir:                    ${udevdir}
          systemdsystemunitdir:       ${systemdsystemunitdir}
          using libsystemd-login:     ${have_libsystemd_login}
+	acl support:                ${have_acl}

          compiler:                   ${CC}
          cflags:                     ${CFLAGS}
diff --git a/src/udiskslinuxfilesystem.c b/src/udiskslinuxfilesystem.c
index f243046..9f38630 100644
--- a/src/udiskslinuxfilesystem.c
+++ b/src/udiskslinuxfilesystem.c
@@ -29,7 +29,9 @@
  #include <stdio.h>
  #include <mntent.h>
  #include <sys/types.h>
+#ifdef HAVE_ACL
  #include <sys/acl.h>
+#endif
  #include <errno.h>

  #include <glib/gstdio.h>
@@ -795,7 +797,7 @@ ensure_utf8 (const gchar *s)
  }

  /* 
---------------------------------------------------------------------------------------------------- 
*/
-
+#ifdef HAVE_ACL
  static gboolean
  add_acl (const gchar  *path,
           uid_t         uid,
@@ -831,7 +833,7 @@ add_acl (const gchar  *path,
      acl_free (acl);
    return ret;
  }
-
+#endif
  /*
   * calculate_mount_point: <internal>
   * @dameon: A #UDisksDaemon.
@@ -921,7 +923,11 @@ calculate_mount_point (UDisksDaemon              
*daemon,
                goto out;
              }
            /* Finally, add the read+execute ACL for $USER */
+#ifdef HAVE_ACL
            if (!add_acl (mount_dir, uid, error))
+#else
+          if (chown (mount_dir, uid, -1) == -1)
+#endif
              {
                if (rmdir (mount_dir) != 0)
                  udisks_warning ("Error calling rmdir() on %s: %m", 
mount_dir);
-- 
1.9.0



Dne 2014-03-13 22:31, David Heidelberger napsal:
> Hello this patch is based on
> http://www.marshut.com/ikyvtw/udisks-updated-to-v2-1-1.html
> 
> Patch should allow to disable ACL. On some systems is ACL disabled
> directly in kernel, so there is no need for userspace support.
> 
> Thank you
> 
> From f62132680aa92f498394db2d640779fa6578cb3d Mon Sep 17 00:00:00 2001
> From: David Heidelberger <david.heidelberger at ixit.cz>
> Date: Thu, 13 Mar 2014 21:28:42 +0100
> Subject: [PATCH] allow disabling ACL
> 
> ---
>  configure.ac                | 38 
> ++++++++++++++++++++++++++------------
>  src/udiskslinuxfilesystem.c |  8 ++++++--
>  2 files changed, 32 insertions(+), 14 deletions(-)
> 
> diff --git a/configure.ac b/configure.ac
> index 3a39b5a..e656abf 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -174,18 +174,31 @@ if test "x$with_systemdsystemunitdir" != "xno"; 
> then
>  fi
>  AM_CONDITIONAL(HAVE_SYSTEMD, [test -n "$systemdsystemunitdir"])
> 
> -# libacl
> -AC_CHECK_HEADERS(
> -        [sys/acl.h acl/libacl.h],
> -        [ACL_CFLAGS=""],
> -        AC_MSG_ERROR([*** ACL headers not found.]))
> -AC_CHECK_LIB(
> -        [acl],
> -        [acl_get_file],
> -        [ACL_LIBS="-lacl"],
> -        AC_MSG_ERROR([*** libacl not found.]))
> -AC_SUBST(ACL_CFLAGS)
> -AC_SUBST(ACL_LIBS)
> +have_acl=no
> +AC_ARG_ENABLE(acl, AS_HELP_STRING([--disable-acl], [disable acl 
> support]))
> +if test "x$enable_acl" != "xno"; then
> +  AC_CHECK_HEADERS(
> +          [sys/acl.h acl/libacl.h],
> +          [
> +            AC_CHECK_LIB(
> +                [acl],
> +                [acl_get_file],
> +                [AC_DEFINE(HAVE_ACL, 1, [Define if libacl is
> available]) have_acl=yes],
> +                have_acl=no)
> +          ],
> +          have_acl=no)
> +  if test "x$have_acl" = "xyes"; then
> +    ACL_CFLAGS=""
> +    ACL_LIBS="-lacl"
> +  fi
> +  AC_SUBST(ACL_CFLAGS)
> +  AC_SUBST(ACL_LIBS)
> +  if test "x$have_acl" = xno -a "x$enable_acl" = xyes; then
> +    AC_MSG_ERROR([acl support requested but libraries not found])
> +  fi
> +fi
> +AM_CONDITIONAL(HAVE_ACL, [test "$have_acl" = "yes"])
> +
> 
>  # Internationalization
>  #
> @@ -232,6 +245,7 @@ echo "
>          udevdir:                    ${udevdir}
>          systemdsystemunitdir:       ${systemdsystemunitdir}
>          using libsystemd-login:     ${have_libsystemd_login}
> +	acl support:                ${have_acl}
> 
>          compiler:                   ${CC}
>          cflags:                     ${CFLAGS}
> diff --git a/src/udiskslinuxfilesystem.c b/src/udiskslinuxfilesystem.c
> index f243046..8a59919 100644
> --- a/src/udiskslinuxfilesystem.c
> +++ b/src/udiskslinuxfilesystem.c
> @@ -29,7 +29,9 @@
>  #include <stdio.h>
>  #include <mntent.h>
>  #include <sys/types.h>
> +#ifdef HAVE_ACL
>  #include <sys/acl.h>
> +#endif
>  #include <errno.h>
> 
>  #include <glib/gstdio.h>
> @@ -795,7 +797,7 @@ ensure_utf8 (const gchar *s)
>  }
> 
>  /*
> ----------------------------------------------------------------------------------------------------
> */
> -
> +#ifdef HAVE_ACL
>  static gboolean
>  add_acl (const gchar  *path,
>           uid_t         uid,
> @@ -831,7 +833,7 @@ add_acl (const gchar  *path,
>      acl_free (acl);
>    return ret;
>  }
> -
> +#endif
>  /*
>   * calculate_mount_point: <internal>
>   * @dameon: A #UDisksDaemon.
> @@ -920,6 +922,7 @@ calculate_mount_point (UDisksDaemon              
> *daemon,
>                             mount_dir);
>                goto out;
>              }
> +#ifdef HAVE_ACL
>            /* Finally, add the read+execute ACL for $USER */
>            if (!add_acl (mount_dir, uid, error))
>              {
> @@ -927,6 +930,7 @@ calculate_mount_point (UDisksDaemon              
> *daemon,
>                  udisks_warning ("Error calling rmdir() on %s: %m", 
> mount_dir);
>                goto out;
>              }
> +#endif
>          }
>      }
>    /* otherwise fall back to mounting in /media */


More information about the devkit-devel mailing list