1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- From b3afea5757af1a7356ba30d2e0a7d5909ca18121 Mon Sep 17 00:00:00 2001
- From: Mike Frysinger <vapier@gentoo.org>
- Date: Fri, 19 Nov 2010 23:48:20 -0500
- Subject: [PATCH 3/4] NO_FORK: control usage of fork() for nommu systems
- nommu systems lack a fork() function, so add a NO_FORK flag to control
- its usage. We don't lose a ton of functionality in doing so, and on an
- embedded system, this is OK.
- Signed-off-by: Mike Frysinger <vapier@gentoo.org>
- ---
- Makefile | 5 +++++
- README | 1 +
- pmap_check.c | 6 ++++--
- portmap.c | 6 ++++++
- 4 files changed, 16 insertions(+), 2 deletions(-)
- diff --git a/Makefile b/Makefile
- index cfcfdbb..9df5574 100644
- --- a/Makefile
- +++ b/Makefile
- @@ -27,6 +27,11 @@ MAN_SED += -e 's/USE_DNS/yes/'
- endif
- endif
-
- +# For no-mmu systems, we have to disable the fork() functions.
- +ifneq ($(NO_FORK),)
- +CPPFLAGS += -DNO_FORK
- +endif
- +
- # Comment out if your RPC library does not allocate privileged ports for
- # requests from processes with root privilege, or the new portmap will
- # always reject requests to register/unregister services on privileged
- diff --git a/README b/README
- index e0b561a..bda1707 100644
- --- a/README
- +++ b/README
- @@ -18,6 +18,7 @@ There is no "./configure", just use "make".
-
- Some make variable can be used to control compilation.
-
- + NO_FORK= if non-empty, don't use fork (good for nommu systems)
- NO_PIE= if non-empty, don't build portmap as a PIE
- NO_TCP_WRAPPER= if non-empty, don't use tcp_wrappers
- USE_DNS= if set, tcp_wrappers can check peers based on hostname
- diff --git a/pmap_check.c b/pmap_check.c
- index 6b3e490..983414e 100644
- --- a/pmap_check.c
- +++ b/pmap_check.c
- @@ -302,8 +302,10 @@ static void logit(int severity, struct sockaddr_in *addr,
- * getrpcbynumber() or syslog() does its thing.
- */
-
- - if (fork() == 0) {
- -
- +#ifndef NO_FORK
- + if (fork() == 0)
- +#endif
- + {
- /* Try to map program number to name. */
-
- if (prognum == 0) {
- diff --git a/portmap.c b/portmap.c
- index 2a98881..94abc64 100644
- --- a/portmap.c
- +++ b/portmap.c
- @@ -753,6 +755,7 @@ static void callit(struct svc_req *rqstp, SVCXPRT *xprt)
- if ((pml = find_service(a.rmt_prog, a.rmt_vers,
- (u_long)IPPROTO_UDP)) == NULL)
- return;
- +#ifndef NO_FORK
- /*
- * fork a child to do the work. Parent immediately returns.
- * Child exits upon completion.
- @@ -763,6 +766,7 @@ static void callit(struct svc_req *rqstp, SVCXPRT *xprt)
- a.rmt_prog);
- return;
- }
- +#endif
- port = pml->pml_map.pm_port;
- get_myaddress(&me);
- me.sin_port = htons(port);
- @@ -783,7 +787,9 @@ static void callit(struct svc_req *rqstp, SVCXPRT *xprt)
- clnt_destroy(client);
- }
- (void)close(so);
- +#ifndef NO_FORK
- exit(0);
- +#endif
- }
-
- #ifndef IGNORE_SIGCHLD /* Lionel Cons <cons@dxcern.cern.ch> */
- --
- 1.7.3.1
|