|
|
- --- a/tirpc/reentrant.h
- +++ b/tirpc/reentrant.h
- @@ -36,7 +36,7 @@
- * These definitions are only guaranteed to be valid on Linux.
- */
-
- -#if defined(__linux__)
- +#if defined(__linux__) || defined(__MACH__)
-
- #include <pthread.h>
-
- --- a/tirpc/rpc/rpcent.h
- +++ b/tirpc/rpc/rpcent.h
- @@ -50,7 +50,7 @@ extern "C" {
-
- /* These are defined in /usr/include/rpc/netdb.h, unless we are using
- the C library without RPC support. */
- -#if defined(__UCLIBC__) && !defined(__UCLIBC_HAS_RPC__) || !defined(__GLIBC__)
- +#if (defined(__UCLIBC__) && !defined(__UCLIBC_HAS_RPC__) || !defined(__GLIBC__)) && !defined(__MACH__)
- struct rpcent {
- char *r_name; /* name of server for this rpc program */
- char **r_aliases; /* alias list */
- --- a/src/rpc_com.h
- +++ b/src/rpc_com.h
- @@ -63,6 +63,14 @@ void __xprt_set_raddr(SVCXPRT *, const s
-
- extern int __svc_maxrec;
-
- +#ifndef SOL_IP
- +#define SOL_IP IPPROTO_IP
- +#endif
- +
- +#ifndef SOL_IPV6
- +#define SOL_IPV6 IPPROTO_IPV6
- +#endif
- +
- #ifdef __cplusplus
- }
- #endif
- --- a/src/svc_dg.c
- +++ b/src/svc_dg.c
- @@ -37,6 +37,11 @@
- *
- * Does some caching in the hopes of achieving execute-at-most-once semantics.
- */
- +
- +#ifdef __APPLE__
- +#define __APPLE_USE_RFC_3542
- +#endif
- +
- #include <pthread.h>
- #include <reentrant.h>
- #include <sys/types.h>
- --- a/src/svc_raw.c
- +++ b/src/svc_raw.c
- @@ -43,6 +43,7 @@
- #include <sys/types.h>
- #include <rpc/raw.h>
- #include <stdlib.h>
- +#include <string.h>
-
- #ifndef UDPMSGSIZE
- #define UDPMSGSIZE 8800
- --- a/src/getpeereid.c
- +++ b/src/getpeereid.c
- @@ -29,12 +29,17 @@
- #include <sys/socket.h>
- #include <sys/un.h>
-
- +#if __APPLE__ || __FreeBSD__
- +#include <sys/ucred.h>
- +#endif
- +
- #include <errno.h>
- #include <unistd.h>
-
- int
- getpeereid(int s, uid_t *euid, gid_t *egid)
- {
- +#if defined(SO_PEERCRED)
- struct ucred uc;
- socklen_t uclen;
- int error;
- @@ -48,4 +53,19 @@ getpeereid(int s, uid_t *euid, gid_t *eg
- *euid = uc.uid;
- *egid = uc.gid;
- return (0);
- +#elif defined(LOCAL_PEERCRED)
- + struct xucred uc;
- + socklen_t uclen;
- + int error;
- +
- + uclen = sizeof(uc);
- + error = getsockopt(s, SOL_LOCAL, LOCAL_PEERCRED, &uc, &uclen); /* SCM_CREDENTIALS */
- + if (error != 0)
- + return (error);
- + *euid = uc.cr_uid;
- + *egid = uc.cr_gid;
- + return (0);
- +#else
- + return (ENOTSUP);
- +#endif
- }
|