hc
2023-02-18 a08c8b75ee83d7f62c9aefc23bfb42082aa4076c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
allow usage of getrpcbynumber() instead of getrpcbynumber_r()
 
libtirpc does not implement the reentrant function getrpcbynumber_r(),
so allow quota to use the non-reentrant version getrpcbynumber(). This
should not be a problem as quota tools are not multi-threaded.
 
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
 
Index: b/configure.in
===================================================================
--- a/configure.in
+++ b/configure.in
@@ -182,6 +182,12 @@
 AC_C_CONST
 AC_C_INLINE
 
+AC_CHECK_FUNCS([getrpcbynumber getrpcbynumber_r])
+
+if test "$ac_cv_func_getrpcbynumber_r" != "yes" -a "$ac_cv_func_getrpcbynumber" != "yes"; then
+   AC_MSG_ERROR([Neither getrpcbynumber_r nor getrpcbynumber are available])
+fi
+
 AC_ARG_ENABLE(rpc,
     [  --enable-rpc=[yes/no]           Enable RPC support [default=yes].],
     ,
Index: b/svc_socket.c
===================================================================
--- a/svc_socket.c
+++ b/svc_socket.c
@@ -55,7 +55,12 @@
     addr.sin_family = AF_INET;
 
     if (!port) {
+#if HAVE_GETRPCBYNUMBER_R
         ret = getrpcbynumber_r(number, &rpcbuf, rpcdata, sizeof(rpcdata), &rpcp);
+#else
+        rpcp = getrpcbynumber(number);
+        ret = 0;
+#endif
         if (ret == 0 && rpcp != NULL) {
             /* First try name */
             ret = getservbyname_r(rpcp->r_name, proto, &servbuf, servdata,