From 2428beec9189bb93e6e1fdd5bdde35acf5279a03 Mon Sep 17 00:00:00 2001
From: Natanael Copa <ncopa@alpinelinux.org>
Date: Sun, 20 May 2012 15:42:56 +0200
Subject: [PATCH] Bug 50145 - make netgroup support optional

https://bugs.freedesktop.org/show_bug.cgi?id=50145

netgroups are not defined in POSIX and are not be available on
all systems.

We check for getnetgrent in configure script.

Signed-off-by: Natanael Copa <ncopa@alpinelinux.org>
---
 configure.ac                                             |    2 +-
 src/polkitbackend/polkitbackendlocalauthority.c          |    8 ++++++--
 src/polkitbackend/polkitbackendlocalauthorizationstore.c |    3 ++-
 3 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/configure.ac b/configure.ac
index f325922..711aa7c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -141,7 +141,7 @@ AC_CHECK_LIB(expat,XML_ParserCreate,[EXPAT_LIBS="-lexpat"],
 	     [AC_MSG_ERROR([Can't find expat library. Please install expat.])])
 AC_SUBST(EXPAT_LIBS)
 
-AC_CHECK_FUNCS(clearenv)
+AC_CHECK_FUNCS(clearenv getnetgrent)
 
 if test "x$GCC" = "xyes"; then
   LDFLAGS="-Wl,--as-needed $LDFLAGS"
diff --git a/src/polkitbackend/polkitbackendlocalauthority.c b/src/polkitbackend/polkitbackendlocalauthority.c
index b53eda3..f14e924 100644
--- a/src/polkitbackend/polkitbackendlocalauthority.c
+++ b/src/polkitbackend/polkitbackendlocalauthority.c
@@ -52,9 +52,10 @@
 
 static GList *get_users_in_group (PolkitIdentity              *group,
                                   gboolean                     include_root);
-
+#if defined HAVE_GETNETGRENT
 static GList *get_users_in_net_group (PolkitIdentity          *group,
                                       gboolean                 include_root);
+#endif
 
 static GList *get_groups_for_user (PolkitIdentity              *user);
 
@@ -511,10 +512,12 @@ polkit_backend_local_authority_get_admin_auth_identities (PolkitBackendInteracti
         {
           ret = g_list_concat (ret, get_users_in_group (identity, FALSE));
         }
+#if defined HAVE_GETNETGRENT
       else if (POLKIT_IS_UNIX_NETGROUP (identity))
         {
           ret =  g_list_concat (ret, get_users_in_net_group (identity, FALSE));
         }
+#endif
       else
         {
           g_warning ("Unsupported identity %s", admin_identities[n]);
@@ -690,6 +693,7 @@ get_users_in_group (PolkitIdentity                    *group,
   return ret;
 }
 
+#if defined HAVE_GETNETGRENT
 static GList *
 get_users_in_net_group (PolkitIdentity                    *group,
                         gboolean                           include_root)
@@ -741,7 +745,7 @@ get_users_in_net_group (PolkitIdentity                    *group,
   endnetgrent ();
   return ret;
 }
-
+#endif
 
 static GList *
 get_groups_for_user (PolkitIdentity *user)
diff --git a/src/polkitbackend/polkitbackendlocalauthorizationstore.c b/src/polkitbackend/polkitbackendlocalauthorizationstore.c
index 2ddfe75..02553c4 100644
--- a/src/polkitbackend/polkitbackendlocalauthorizationstore.c
+++ b/src/polkitbackend/polkitbackendlocalauthorizationstore.c
@@ -725,6 +725,7 @@ polkit_backend_local_authorization_store_lookup (PolkitBackendLocalAuthorization
             break;
         }
 
+#if defined HAVE_GETNETGRENT
       /* if no identity specs matched and identity is a user, match against netgroups */
       if (ll == NULL && POLKIT_IS_UNIX_USER (identity))
         {
@@ -732,13 +733,13 @@ polkit_backend_local_authorization_store_lookup (PolkitBackendLocalAuthorization
           const gchar *user_name = polkit_unix_user_get_name (user_identity);
           if (!user_name)
             continue;
-
           for (ll = authorization->netgroup_identities; ll != NULL; ll = ll->next)
             {
               if (innetgr ((const gchar *) ll->data, NULL, user_name, NULL))
                 break;
             }
         }
+#endif
 
       if (ll == NULL)
         continue;
-- 
1.7.10.2

