xref: /OK3568_Linux_fs/buildroot/package/polkit/0001-make-netgroup-support-optional.patch (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593SmuzhiyunFrom 1b854ef4bb15032091a33fed587e5ba6f3e582eb Mon Sep 17 00:00:00 2001
2*4882a593SmuzhiyunFrom: Khem Raj <raj.khem@gmail.com>
3*4882a593SmuzhiyunDate: Wed, 22 May 2019 13:18:55 -0700
4*4882a593SmuzhiyunSubject: [PATCH] make netgroup support optional
5*4882a593Smuzhiyun
6*4882a593SmuzhiyunOn at least Linux/musl and Linux/uclibc, netgroup
7*4882a593Smuzhiyunsupport is not available.  PolKit fails to compile on these systems
8*4882a593Smuzhiyunfor that reason.
9*4882a593Smuzhiyun
10*4882a593SmuzhiyunThis change makes netgroup support conditional on the presence of the
11*4882a593Smuzhiyunsetnetgrent(3) function which is required for the support to work.  If
12*4882a593Smuzhiyunthat function is not available on the system, an error will be returned
13*4882a593Smuzhiyunto the administrator if unix-netgroup: is specified in configuration.
14*4882a593Smuzhiyun
15*4882a593SmuzhiyunFixes bug 50145.
16*4882a593Smuzhiyun
17*4882a593SmuzhiyunSigned-off-by: A. Wilcox <AWilcox@Wilcox-Tech.com>
18*4882a593SmuzhiyunSigned-off-by: Khem Raj <raj.khem@gmail.com>
19*4882a593Smuzhiyun[Adam: Extend patch to work with duktape integration.]
20*4882a593SmuzhiyunSigned-off-by: Adam Duskett <aduskett@gmail.com>
21*4882a593Smuzhiyun[Thomas: add introspection.m4.]
22*4882a593SmuzhiyunSigned-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
23*4882a593Smuzhiyun---
24*4882a593Smuzhiyun buildutil/introspection.m4                    | 142 ++++++++++++++++++
25*4882a593Smuzhiyun configure.ac                                  |   2 +-
26*4882a593Smuzhiyun src/polkit/polkitidentity.c                   |  16 ++
27*4882a593Smuzhiyun src/polkit/polkitunixnetgroup.c               |   3 +
28*4882a593Smuzhiyun .../polkitbackendduktapeauthority.c           |   2 +
29*4882a593Smuzhiyun .../polkitbackendinteractiveauthority.c       |  14 +-
30*4882a593Smuzhiyun .../polkitbackendjsauthority.cpp              |   3 +-
31*4882a593Smuzhiyun test/polkit/polkitidentitytest.c              |   9 +-
32*4882a593Smuzhiyun test/polkit/polkitunixnetgrouptest.c          |   3 +
33*4882a593Smuzhiyun .../test-polkitbackendjsauthority.c           |   2 +
34*4882a593Smuzhiyun 10 files changed, 187 insertions(+), 9 deletions(-)
35*4882a593Smuzhiyun create mode 100644 buildutil/introspection.m4
36*4882a593Smuzhiyun
37*4882a593Smuzhiyundiff --git a/buildutil/introspection.m4 b/buildutil/introspection.m4
38*4882a593Smuzhiyunnew file mode 100644
39*4882a593Smuzhiyunindex 0000000..b0ccd68
40*4882a593Smuzhiyun--- /dev/null
41*4882a593Smuzhiyun+++ b/buildutil/introspection.m4
42*4882a593Smuzhiyun@@ -0,0 +1,142 @@
43*4882a593Smuzhiyun+dnl -*- mode: autoconf -*-
44*4882a593Smuzhiyun+dnl Copyright 2009 Johan Dahlin
45*4882a593Smuzhiyun+dnl
46*4882a593Smuzhiyun+dnl This file is free software; the author(s) gives unlimited
47*4882a593Smuzhiyun+dnl permission to copy and/or distribute it, with or without
48*4882a593Smuzhiyun+dnl modifications, as long as this notice is preserved.
49*4882a593Smuzhiyun+dnl
50*4882a593Smuzhiyun+
51*4882a593Smuzhiyun+# serial 1
52*4882a593Smuzhiyun+
53*4882a593Smuzhiyun+dnl This is a copy of AS_AC_EXPAND
54*4882a593Smuzhiyun+dnl
55*4882a593Smuzhiyun+dnl (C) 2003, 2004, 2005 Thomas Vander Stichele <thomas at apestaart dot org>
56*4882a593Smuzhiyun+dnl Copying and distribution of this file, with or without modification,
57*4882a593Smuzhiyun+dnl are permitted in any medium without royalty provided the copyright
58*4882a593Smuzhiyun+dnl notice and this notice are preserved.
59*4882a593Smuzhiyun+m4_define([_GOBJECT_INTROSPECTION_AS_AC_EXPAND],
60*4882a593Smuzhiyun+[
61*4882a593Smuzhiyun+  EXP_VAR=[$1]
62*4882a593Smuzhiyun+  FROM_VAR=[$2]
63*4882a593Smuzhiyun+
64*4882a593Smuzhiyun+  dnl first expand prefix and exec_prefix if necessary
65*4882a593Smuzhiyun+  prefix_save=$prefix
66*4882a593Smuzhiyun+  exec_prefix_save=$exec_prefix
67*4882a593Smuzhiyun+
68*4882a593Smuzhiyun+  dnl if no prefix given, then use /usr/local, the default prefix
69*4882a593Smuzhiyun+  if test "x$prefix" = "xNONE"; then
70*4882a593Smuzhiyun+    prefix="$ac_default_prefix"
71*4882a593Smuzhiyun+  fi
72*4882a593Smuzhiyun+  dnl if no exec_prefix given, then use prefix
73*4882a593Smuzhiyun+  if test "x$exec_prefix" = "xNONE"; then
74*4882a593Smuzhiyun+    exec_prefix=$prefix
75*4882a593Smuzhiyun+  fi
76*4882a593Smuzhiyun+
77*4882a593Smuzhiyun+  full_var="$FROM_VAR"
78*4882a593Smuzhiyun+  dnl loop until it doesn't change anymore
79*4882a593Smuzhiyun+  while true; do
80*4882a593Smuzhiyun+    new_full_var="`eval echo $full_var`"
81*4882a593Smuzhiyun+    if test "x$new_full_var" = "x$full_var"; then break; fi
82*4882a593Smuzhiyun+    full_var=$new_full_var
83*4882a593Smuzhiyun+  done
84*4882a593Smuzhiyun+
85*4882a593Smuzhiyun+  dnl clean up
86*4882a593Smuzhiyun+  full_var=$new_full_var
87*4882a593Smuzhiyun+  AC_SUBST([$1], "$full_var")
88*4882a593Smuzhiyun+
89*4882a593Smuzhiyun+  dnl restore prefix and exec_prefix
90*4882a593Smuzhiyun+  prefix=$prefix_save
91*4882a593Smuzhiyun+  exec_prefix=$exec_prefix_save
92*4882a593Smuzhiyun+])
93*4882a593Smuzhiyun+
94*4882a593Smuzhiyun+m4_define([_GOBJECT_INTROSPECTION_CHECK_INTERNAL],
95*4882a593Smuzhiyun+[
96*4882a593Smuzhiyun+    AC_BEFORE([AC_PROG_LIBTOOL],[$0])dnl setup libtool first
97*4882a593Smuzhiyun+    AC_BEFORE([AM_PROG_LIBTOOL],[$0])dnl setup libtool first
98*4882a593Smuzhiyun+    AC_BEFORE([LT_INIT],[$0])dnl setup libtool first
99*4882a593Smuzhiyun+
100*4882a593Smuzhiyun+    dnl enable/disable introspection
101*4882a593Smuzhiyun+    m4_if([$2], [require],
102*4882a593Smuzhiyun+    [dnl
103*4882a593Smuzhiyun+        enable_introspection=yes
104*4882a593Smuzhiyun+    ],[dnl
105*4882a593Smuzhiyun+        AC_ARG_ENABLE(introspection,
106*4882a593Smuzhiyun+                  AS_HELP_STRING([--enable-introspection[=@<:@no/auto/yes@:>@]],
107*4882a593Smuzhiyun+                                 [Enable introspection for this build]),,
108*4882a593Smuzhiyun+                                 [enable_introspection=auto])
109*4882a593Smuzhiyun+    ])dnl
110*4882a593Smuzhiyun+
111*4882a593Smuzhiyun+    AC_MSG_CHECKING([for gobject-introspection])
112*4882a593Smuzhiyun+
113*4882a593Smuzhiyun+    dnl presence/version checking
114*4882a593Smuzhiyun+    AS_CASE([$enable_introspection],
115*4882a593Smuzhiyun+    [no], [dnl
116*4882a593Smuzhiyun+        found_introspection="no (disabled, use --enable-introspection to enable)"
117*4882a593Smuzhiyun+    ],dnl
118*4882a593Smuzhiyun+    [yes],[dnl
119*4882a593Smuzhiyun+        PKG_CHECK_EXISTS([gobject-introspection-1.0],,
120*4882a593Smuzhiyun+                         AC_MSG_ERROR([gobject-introspection-1.0 is not installed]))
121*4882a593Smuzhiyun+        PKG_CHECK_EXISTS([gobject-introspection-1.0 >= $1],
122*4882a593Smuzhiyun+                         found_introspection=yes,
123*4882a593Smuzhiyun+                         AC_MSG_ERROR([You need to have gobject-introspection >= $1 installed to build AC_PACKAGE_NAME]))
124*4882a593Smuzhiyun+    ],dnl
125*4882a593Smuzhiyun+    [auto],[dnl
126*4882a593Smuzhiyun+        PKG_CHECK_EXISTS([gobject-introspection-1.0 >= $1], found_introspection=yes, found_introspection=no)
127*4882a593Smuzhiyun+	dnl Canonicalize enable_introspection
128*4882a593Smuzhiyun+	enable_introspection=$found_introspection
129*4882a593Smuzhiyun+    ],dnl
130*4882a593Smuzhiyun+    [dnl
131*4882a593Smuzhiyun+        AC_MSG_ERROR([invalid argument passed to --enable-introspection, should be one of @<:@no/auto/yes@:>@])
132*4882a593Smuzhiyun+    ])dnl
133*4882a593Smuzhiyun+
134*4882a593Smuzhiyun+    AC_MSG_RESULT([$found_introspection])
135*4882a593Smuzhiyun+
136*4882a593Smuzhiyun+    dnl expand datadir/libdir so we can pass them to pkg-config
137*4882a593Smuzhiyun+    dnl and get paths relative to our target directories
138*4882a593Smuzhiyun+    _GOBJECT_INTROSPECTION_AS_AC_EXPAND(_GI_EXP_DATADIR, "$datadir")
139*4882a593Smuzhiyun+    _GOBJECT_INTROSPECTION_AS_AC_EXPAND(_GI_EXP_LIBDIR, "$libdir")
140*4882a593Smuzhiyun+
141*4882a593Smuzhiyun+    INTROSPECTION_SCANNER=
142*4882a593Smuzhiyun+    INTROSPECTION_COMPILER=
143*4882a593Smuzhiyun+    INTROSPECTION_GENERATE=
144*4882a593Smuzhiyun+    INTROSPECTION_GIRDIR=
145*4882a593Smuzhiyun+    INTROSPECTION_TYPELIBDIR=
146*4882a593Smuzhiyun+    if test "x$found_introspection" = "xyes"; then
147*4882a593Smuzhiyun+       INTROSPECTION_SCANNER=$PKG_CONFIG_SYSROOT_DIR`$PKG_CONFIG --variable=g_ir_scanner gobject-introspection-1.0`
148*4882a593Smuzhiyun+       INTROSPECTION_COMPILER=$PKG_CONFIG_SYSROOT_DIR`$PKG_CONFIG --variable=g_ir_compiler gobject-introspection-1.0`
149*4882a593Smuzhiyun+       INTROSPECTION_GENERATE=$PKG_CONFIG_SYSROOT_DIR`$PKG_CONFIG --variable=g_ir_generate gobject-introspection-1.0`
150*4882a593Smuzhiyun+       INTROSPECTION_GIRDIR=`$PKG_CONFIG --define-variable=datadir="${_GI_EXP_DATADIR}" --variable=girdir gobject-introspection-1.0`
151*4882a593Smuzhiyun+       INTROSPECTION_TYPELIBDIR="$($PKG_CONFIG --define-variable=libdir="${_GI_EXP_LIBDIR}" --variable=typelibdir gobject-introspection-1.0)"
152*4882a593Smuzhiyun+       INTROSPECTION_CFLAGS=`$PKG_CONFIG --cflags gobject-introspection-1.0`
153*4882a593Smuzhiyun+       INTROSPECTION_LIBS=`$PKG_CONFIG --libs gobject-introspection-1.0`
154*4882a593Smuzhiyun+       INTROSPECTION_MAKEFILE=$PKG_CONFIG_SYSROOT_DIR`$PKG_CONFIG --variable=datadir gobject-introspection-1.0`/gobject-introspection-1.0/Makefile.introspection
155*4882a593Smuzhiyun+    fi
156*4882a593Smuzhiyun+    AC_SUBST(INTROSPECTION_SCANNER)
157*4882a593Smuzhiyun+    AC_SUBST(INTROSPECTION_COMPILER)
158*4882a593Smuzhiyun+    AC_SUBST(INTROSPECTION_GENERATE)
159*4882a593Smuzhiyun+    AC_SUBST(INTROSPECTION_GIRDIR)
160*4882a593Smuzhiyun+    AC_SUBST(INTROSPECTION_TYPELIBDIR)
161*4882a593Smuzhiyun+    AC_SUBST(INTROSPECTION_CFLAGS)
162*4882a593Smuzhiyun+    AC_SUBST(INTROSPECTION_LIBS)
163*4882a593Smuzhiyun+    AC_SUBST(INTROSPECTION_MAKEFILE)
164*4882a593Smuzhiyun+
165*4882a593Smuzhiyun+    AM_CONDITIONAL(HAVE_INTROSPECTION, test "x$found_introspection" = "xyes")
166*4882a593Smuzhiyun+])
167*4882a593Smuzhiyun+
168*4882a593Smuzhiyun+
169*4882a593Smuzhiyun+dnl Usage:
170*4882a593Smuzhiyun+dnl   GOBJECT_INTROSPECTION_CHECK([minimum-g-i-version])
171*4882a593Smuzhiyun+
172*4882a593Smuzhiyun+AC_DEFUN([GOBJECT_INTROSPECTION_CHECK],
173*4882a593Smuzhiyun+[
174*4882a593Smuzhiyun+  _GOBJECT_INTROSPECTION_CHECK_INTERNAL([$1])
175*4882a593Smuzhiyun+])
176*4882a593Smuzhiyun+
177*4882a593Smuzhiyun+dnl Usage:
178*4882a593Smuzhiyun+dnl   GOBJECT_INTROSPECTION_REQUIRE([minimum-g-i-version])
179*4882a593Smuzhiyun+
180*4882a593Smuzhiyun+
181*4882a593Smuzhiyun+AC_DEFUN([GOBJECT_INTROSPECTION_REQUIRE],
182*4882a593Smuzhiyun+[
183*4882a593Smuzhiyun+  _GOBJECT_INTROSPECTION_CHECK_INTERNAL([$1], [require])
184*4882a593Smuzhiyun+])
185*4882a593Smuzhiyundiff --git a/configure.ac b/configure.ac
186*4882a593Smuzhiyunindex 5cedb4e..87aa0ad 100644
187*4882a593Smuzhiyun--- a/configure.ac
188*4882a593Smuzhiyun+++ b/configure.ac
189*4882a593Smuzhiyun@@ -111,7 +111,7 @@ AC_CHECK_LIB(expat,XML_ParserCreate,[EXPAT_LIBS="-lexpat"],
190*4882a593Smuzhiyun 	     [AC_MSG_ERROR([Can't find expat library. Please install expat.])])
191*4882a593Smuzhiyun AC_SUBST(EXPAT_LIBS)
192*4882a593Smuzhiyun
193*4882a593Smuzhiyun-AC_CHECK_FUNCS(clearenv fdatasync)
194*4882a593Smuzhiyun+AC_CHECK_FUNCS(clearenv fdatasync setnetgrent)
195*4882a593Smuzhiyun
196*4882a593Smuzhiyun if test "x$GCC" = "xyes"; then
197*4882a593Smuzhiyun   LDFLAGS="-Wl,--as-needed $LDFLAGS"
198*4882a593Smuzhiyundiff --git a/src/polkit/polkitidentity.c b/src/polkit/polkitidentity.c
199*4882a593Smuzhiyunindex 3aa1f7f..10e9c17 100644
200*4882a593Smuzhiyun--- a/src/polkit/polkitidentity.c
201*4882a593Smuzhiyun+++ b/src/polkit/polkitidentity.c
202*4882a593Smuzhiyun@@ -182,7 +182,15 @@ polkit_identity_from_string  (const gchar   *str,
203*4882a593Smuzhiyun     }
204*4882a593Smuzhiyun   else if (g_str_has_prefix (str, "unix-netgroup:"))
205*4882a593Smuzhiyun     {
206*4882a593Smuzhiyun+#ifndef HAVE_SETNETGRENT
207*4882a593Smuzhiyun+      g_set_error (error,
208*4882a593Smuzhiyun+                   POLKIT_ERROR,
209*4882a593Smuzhiyun+                   POLKIT_ERROR_FAILED,
210*4882a593Smuzhiyun+                   "Netgroups are not available on this machine ('%s')",
211*4882a593Smuzhiyun+                   str);
212*4882a593Smuzhiyun+#else
213*4882a593Smuzhiyun       identity = polkit_unix_netgroup_new (str + sizeof "unix-netgroup:" - 1);
214*4882a593Smuzhiyun+#endif
215*4882a593Smuzhiyun     }
216*4882a593Smuzhiyun
217*4882a593Smuzhiyun   if (identity == NULL && (error != NULL && *error == NULL))
218*4882a593Smuzhiyun@@ -344,6 +352,13 @@ polkit_identity_new_for_gvariant (GVariant  *variant,
219*4882a593Smuzhiyun       GVariant *v;
220*4882a593Smuzhiyun       const char *name;
221*4882a593Smuzhiyun
222*4882a593Smuzhiyun+#ifndef HAVE_SETNETGRENT
223*4882a593Smuzhiyun+      g_set_error (error,
224*4882a593Smuzhiyun+                   POLKIT_ERROR,
225*4882a593Smuzhiyun+                   POLKIT_ERROR_FAILED,
226*4882a593Smuzhiyun+                   "Netgroups are not available on this machine");
227*4882a593Smuzhiyun+      goto out;
228*4882a593Smuzhiyun+#else
229*4882a593Smuzhiyun       v = lookup_asv (details_gvariant, "name", G_VARIANT_TYPE_STRING, error);
230*4882a593Smuzhiyun       if (v == NULL)
231*4882a593Smuzhiyun         {
232*4882a593Smuzhiyun@@ -353,6 +368,7 @@ polkit_identity_new_for_gvariant (GVariant  *variant,
233*4882a593Smuzhiyun       name = g_variant_get_string (v, NULL);
234*4882a593Smuzhiyun       ret = polkit_unix_netgroup_new (name);
235*4882a593Smuzhiyun       g_variant_unref (v);
236*4882a593Smuzhiyun+#endif
237*4882a593Smuzhiyun     }
238*4882a593Smuzhiyun   else
239*4882a593Smuzhiyun     {
240*4882a593Smuzhiyundiff --git a/src/polkit/polkitunixnetgroup.c b/src/polkit/polkitunixnetgroup.c
241*4882a593Smuzhiyunindex 8a2b369..83f8d4a 100644
242*4882a593Smuzhiyun--- a/src/polkit/polkitunixnetgroup.c
243*4882a593Smuzhiyun+++ b/src/polkit/polkitunixnetgroup.c
244*4882a593Smuzhiyun@@ -194,6 +194,9 @@ polkit_unix_netgroup_set_name (PolkitUnixNetgroup *group,
245*4882a593Smuzhiyun PolkitIdentity *
246*4882a593Smuzhiyun polkit_unix_netgroup_new (const gchar *name)
247*4882a593Smuzhiyun {
248*4882a593Smuzhiyun+#ifndef HAVE_SETNETGRENT
249*4882a593Smuzhiyun+  g_assert_not_reached();
250*4882a593Smuzhiyun+#endif
251*4882a593Smuzhiyun   g_return_val_if_fail (name != NULL, NULL);
252*4882a593Smuzhiyun   return POLKIT_IDENTITY (g_object_new (POLKIT_TYPE_UNIX_NETGROUP,
253*4882a593Smuzhiyun                                        "name", name,
254*4882a593Smuzhiyundiff --git a/src/polkitbackend/polkitbackendduktapeauthority.c b/src/polkitbackend/polkitbackendduktapeauthority.c
255*4882a593Smuzhiyunindex 4b4f8fd..e19b009 100644
256*4882a593Smuzhiyun--- a/src/polkitbackend/polkitbackendduktapeauthority.c
257*4882a593Smuzhiyun+++ b/src/polkitbackend/polkitbackendduktapeauthority.c
258*4882a593Smuzhiyun@@ -1036,6 +1036,7 @@ js_polkit_user_is_in_netgroup (duk_context *cx)
259*4882a593Smuzhiyun   const char *netgroup;
260*4882a593Smuzhiyun   gboolean is_in_netgroup = FALSE;
261*4882a593Smuzhiyun
262*4882a593Smuzhiyun+#ifdef HAVE_SETNETGRENT
263*4882a593Smuzhiyun   user = duk_require_string (cx, 0);
264*4882a593Smuzhiyun   netgroup = duk_require_string (cx, 1);
265*4882a593Smuzhiyun
266*4882a593Smuzhiyun@@ -1046,6 +1047,7 @@ js_polkit_user_is_in_netgroup (duk_context *cx)
267*4882a593Smuzhiyun     {
268*4882a593Smuzhiyun       is_in_netgroup = TRUE;
269*4882a593Smuzhiyun     }
270*4882a593Smuzhiyun+#endif
271*4882a593Smuzhiyun
272*4882a593Smuzhiyun   duk_push_boolean (cx, is_in_netgroup);
273*4882a593Smuzhiyun   return 1;
274*4882a593Smuzhiyundiff --git a/src/polkitbackend/polkitbackendinteractiveauthority.c b/src/polkitbackend/polkitbackendinteractiveauthority.c
275*4882a593Smuzhiyunindex 056d9a8..36c2f3d 100644
276*4882a593Smuzhiyun--- a/src/polkitbackend/polkitbackendinteractiveauthority.c
277*4882a593Smuzhiyun+++ b/src/polkitbackend/polkitbackendinteractiveauthority.c
278*4882a593Smuzhiyun@@ -2233,25 +2233,26 @@ get_users_in_net_group (PolkitIdentity                    *group,
279*4882a593Smuzhiyun   GList *ret;
280*4882a593Smuzhiyun
281*4882a593Smuzhiyun   ret = NULL;
282*4882a593Smuzhiyun+#ifdef HAVE_SETNETGRENT
283*4882a593Smuzhiyun   name = polkit_unix_netgroup_get_name (POLKIT_UNIX_NETGROUP (group));
284*4882a593Smuzhiyun
285*4882a593Smuzhiyun-#ifdef HAVE_SETNETGRENT_RETURN
286*4882a593Smuzhiyun+# ifdef HAVE_SETNETGRENT_RETURN
287*4882a593Smuzhiyun   if (setnetgrent (name) == 0)
288*4882a593Smuzhiyun     {
289*4882a593Smuzhiyun       g_warning ("Error looking up net group with name %s: %s", name, g_strerror (errno));
290*4882a593Smuzhiyun       goto out;
291*4882a593Smuzhiyun     }
292*4882a593Smuzhiyun-#else
293*4882a593Smuzhiyun+# else
294*4882a593Smuzhiyun   setnetgrent (name);
295*4882a593Smuzhiyun-#endif
296*4882a593Smuzhiyun+# endif /* HAVE_SETNETGRENT_RETURN */
297*4882a593Smuzhiyun
298*4882a593Smuzhiyun   for (;;)
299*4882a593Smuzhiyun     {
300*4882a593Smuzhiyun-#if defined(HAVE_NETBSD) || defined(HAVE_OPENBSD)
301*4882a593Smuzhiyun+# if defined(HAVE_NETBSD) || defined(HAVE_OPENBSD)
302*4882a593Smuzhiyun       const char *hostname, *username, *domainname;
303*4882a593Smuzhiyun-#else
304*4882a593Smuzhiyun+# else
305*4882a593Smuzhiyun       char *hostname, *username, *domainname;
306*4882a593Smuzhiyun-#endif
307*4882a593Smuzhiyun+# endif /* defined(HAVE_NETBSD) || defined(HAVE_OPENBSD) */
308*4882a593Smuzhiyun       PolkitIdentity *user;
309*4882a593Smuzhiyun       GError *error = NULL;
310*4882a593Smuzhiyun
311*4882a593Smuzhiyun@@ -2282,6 +2283,7 @@ get_users_in_net_group (PolkitIdentity                    *group,
312*4882a593Smuzhiyun
313*4882a593Smuzhiyun  out:
314*4882a593Smuzhiyun   endnetgrent ();
315*4882a593Smuzhiyun+#endif /* HAVE_SETNETGRENT */
316*4882a593Smuzhiyun   return ret;
317*4882a593Smuzhiyun }
318*4882a593Smuzhiyun
319*4882a593Smuzhiyundiff --git a/src/polkitbackend/polkitbackendjsauthority.cpp b/src/polkitbackend/polkitbackendjsauthority.cpp
320*4882a593Smuzhiyunindex 9b752d1..09b2878 100644
321*4882a593Smuzhiyun--- a/src/polkitbackend/polkitbackendjsauthority.cpp
322*4882a593Smuzhiyun+++ b/src/polkitbackend/polkitbackendjsauthority.cpp
323*4882a593Smuzhiyun@@ -1520,6 +1520,7 @@ js_polkit_user_is_in_netgroup (JSContext  *cx,
324*4882a593Smuzhiyun
325*4882a593Smuzhiyun   JS::CallArgs args = JS::CallArgsFromVp (argc, vp);
326*4882a593Smuzhiyun
327*4882a593Smuzhiyun+#ifdef HAVE_SETNETGRENT
328*4882a593Smuzhiyun   JS::RootedString usrstr (authority->priv->cx);
329*4882a593Smuzhiyun   usrstr = args[0].toString();
330*4882a593Smuzhiyun   user = JS_EncodeStringToUTF8 (cx, usrstr);
331*4882a593Smuzhiyun@@ -1534,7 +1535,7 @@ js_polkit_user_is_in_netgroup (JSContext  *cx,
332*4882a593Smuzhiyun     {
333*4882a593Smuzhiyun       is_in_netgroup =  true;
334*4882a593Smuzhiyun     }
335*4882a593Smuzhiyun-
336*4882a593Smuzhiyun+#endif
337*4882a593Smuzhiyun   ret = true;
338*4882a593Smuzhiyun
339*4882a593Smuzhiyun   args.rval ().setBoolean (is_in_netgroup);
340*4882a593Smuzhiyundiff --git a/test/polkit/polkitidentitytest.c b/test/polkit/polkitidentitytest.c
341*4882a593Smuzhiyunindex e91967b..e829aaa 100644
342*4882a593Smuzhiyun--- a/test/polkit/polkitidentitytest.c
343*4882a593Smuzhiyun+++ b/test/polkit/polkitidentitytest.c
344*4882a593Smuzhiyun@@ -19,6 +19,7 @@
345*4882a593Smuzhiyun  * Author: Nikki VonHollen <vonhollen@google.com>
346*4882a593Smuzhiyun  */
347*4882a593Smuzhiyun
348*4882a593Smuzhiyun+#include "config.h"
349*4882a593Smuzhiyun #include "glib.h"
350*4882a593Smuzhiyun #include <polkit/polkit.h>
351*4882a593Smuzhiyun #include <polkit/polkitprivate.h>
352*4882a593Smuzhiyun@@ -145,11 +146,15 @@ struct ComparisonTestData comparison_test_data [] = {
353*4882a593Smuzhiyun   {"unix-group:root", "unix-group:jane", FALSE},
354*4882a593Smuzhiyun   {"unix-group:jane", "unix-group:jane", TRUE},
355*4882a593Smuzhiyun
356*4882a593Smuzhiyun+#ifdef HAVE_SETNETGRENT
357*4882a593Smuzhiyun   {"unix-netgroup:foo", "unix-netgroup:foo", TRUE},
358*4882a593Smuzhiyun   {"unix-netgroup:foo", "unix-netgroup:bar", FALSE},
359*4882a593Smuzhiyun+#endif
360*4882a593Smuzhiyun
361*4882a593Smuzhiyun   {"unix-user:root", "unix-group:root", FALSE},
362*4882a593Smuzhiyun+#ifdef HAVE_SETNETGRENT
363*4882a593Smuzhiyun   {"unix-user:jane", "unix-netgroup:foo", FALSE},
364*4882a593Smuzhiyun+#endif
365*4882a593Smuzhiyun
366*4882a593Smuzhiyun   {NULL},
367*4882a593Smuzhiyun };
368*4882a593Smuzhiyun@@ -181,11 +186,13 @@ main (int argc, char *argv[])
369*4882a593Smuzhiyun   g_test_add_data_func ("/PolkitIdentity/group_string_2", "unix-group:jane", test_string);
370*4882a593Smuzhiyun   g_test_add_data_func ("/PolkitIdentity/group_string_3", "unix-group:users", test_string);
371*4882a593Smuzhiyun
372*4882a593Smuzhiyun+#ifdef HAVE_SETNETGRENT
373*4882a593Smuzhiyun   g_test_add_data_func ("/PolkitIdentity/netgroup_string", "unix-netgroup:foo", test_string);
374*4882a593Smuzhiyun+  g_test_add_data_func ("/PolkitIdentity/netgroup_gvariant", "unix-netgroup:foo", test_gvariant);
375*4882a593Smuzhiyun+#endif
376*4882a593Smuzhiyun
377*4882a593Smuzhiyun   g_test_add_data_func ("/PolkitIdentity/user_gvariant", "unix-user:root", test_gvariant);
378*4882a593Smuzhiyun   g_test_add_data_func ("/PolkitIdentity/group_gvariant", "unix-group:root", test_gvariant);
379*4882a593Smuzhiyun-  g_test_add_data_func ("/PolkitIdentity/netgroup_gvariant", "unix-netgroup:foo", test_gvariant);
380*4882a593Smuzhiyun
381*4882a593Smuzhiyun   add_comparison_tests ();
382*4882a593Smuzhiyun
383*4882a593Smuzhiyundiff --git a/test/polkit/polkitunixnetgrouptest.c b/test/polkit/polkitunixnetgrouptest.c
384*4882a593Smuzhiyunindex 3701ba1..e3352eb 100644
385*4882a593Smuzhiyun--- a/test/polkit/polkitunixnetgrouptest.c
386*4882a593Smuzhiyun+++ b/test/polkit/polkitunixnetgrouptest.c
387*4882a593Smuzhiyun@@ -19,6 +19,7 @@
388*4882a593Smuzhiyun  * Author: Nikki VonHollen <vonhollen@google.com>
389*4882a593Smuzhiyun  */
390*4882a593Smuzhiyun
391*4882a593Smuzhiyun+#include "config.h"
392*4882a593Smuzhiyun #include "glib.h"
393*4882a593Smuzhiyun #include <polkit/polkit.h>
394*4882a593Smuzhiyun #include <string.h>
395*4882a593Smuzhiyun@@ -69,7 +70,9 @@ int
396*4882a593Smuzhiyun main (int argc, char *argv[])
397*4882a593Smuzhiyun {
398*4882a593Smuzhiyun   g_test_init (&argc, &argv, NULL);
399*4882a593Smuzhiyun+#ifdef HAVE_SETNETGRENT
400*4882a593Smuzhiyun   g_test_add_func ("/PolkitUnixNetgroup/new", test_new);
401*4882a593Smuzhiyun   g_test_add_func ("/PolkitUnixNetgroup/set_name", test_set_name);
402*4882a593Smuzhiyun+#endif
403*4882a593Smuzhiyun   return g_test_run ();
404*4882a593Smuzhiyun }
405*4882a593Smuzhiyundiff --git a/test/polkitbackend/test-polkitbackendjsauthority.c b/test/polkitbackend/test-polkitbackendjsauthority.c
406*4882a593Smuzhiyunindex 71aad23..fdd28f3 100644
407*4882a593Smuzhiyun--- a/test/polkitbackend/test-polkitbackendjsauthority.c
408*4882a593Smuzhiyun+++ b/test/polkitbackend/test-polkitbackendjsauthority.c
409*4882a593Smuzhiyun@@ -137,12 +137,14 @@ test_get_admin_identities (void)
410*4882a593Smuzhiyun         "unix-group:users"
411*4882a593Smuzhiyun       }
412*4882a593Smuzhiyun     },
413*4882a593Smuzhiyun+#ifdef HAVE_SETNETGRENT
414*4882a593Smuzhiyun     {
415*4882a593Smuzhiyun       "net.company.action3",
416*4882a593Smuzhiyun       {
417*4882a593Smuzhiyun         "unix-netgroup:foo"
418*4882a593Smuzhiyun       }
419*4882a593Smuzhiyun     },
420*4882a593Smuzhiyun+#endif
421*4882a593Smuzhiyun   };
422*4882a593Smuzhiyun   guint n;
423*4882a593Smuzhiyun
424*4882a593Smuzhiyun--
425*4882a593Smuzhiyun2.25.1
426*4882a593Smuzhiyun
427