diff -d --recursive -u portmap_5beta/Makefile portmap_5beta_fjo/Makefile --- portmap_5beta/Makefile Sat Jul 6 23:06:19 1996 +++ portmap_5beta_fjo/Makefile Sun May 26 19:05:59 2002 @@ -15,8 +15,8 @@ # no access control tables. The local system, since it runs the portmap # daemon, is always treated as an authorized host. -HOSTS_ACCESS= -DHOSTS_ACCESS -WRAP_LIB = $(WRAP_DIR)/libwrap.a +#HOSTS_ACCESS= -DHOSTS_ACCESS +#WRAP_LIB = $(WRAP_DIR)/libwrap.a # Comment out if your RPC library does not allocate privileged ports for # requests from processes with root privilege, or the new portmap will @@ -24,7 +24,7 @@ # ports. You can find out by running "rpcinfo -p"; if all mountd and NIS # daemons use a port >= 1024 you should probably disable the next line. -CHECK_PORT = -DCHECK_PORT +CHECK_PORT = -DCHECK_PORT -Dlint # Warning: troublesome feature ahead!! Enable only when you are really # desperate!! @@ -106,7 +106,8 @@ SHELL = /bin/sh -COPT = $(CONST) -Dperror=xperror $(HOSTS_ACCESS) $(CHECK_PORT) \ +# COPT = $(CONST) -Dperror=xperror $(HOSTS_ACCESS) $(CHECK_PORT) +COPT = $(CONST) $(HOSTS_ACCESS) $(CHECK_PORT) \ $(SYS) -DFACILITY=$(FACILITY) $(ULONG) $(ZOMBIES) $(SA_LEN) \ $(LOOPBACK) $(SETPGRP) CFLAGS = $(COPT) -O $(NSARCHS) @@ -114,7 +115,7 @@ all: portmap pmap_dump pmap_set -portmap: $(OBJECTS) $(WRAP_DIR)/libwrap.a +portmap: $(OBJECTS) $(CC) $(CFLAGS) -o $@ $(OBJECTS) $(WRAP_LIB) $(LIBS) pmap_dump: pmap_dump.c diff -d --recursive -u portmap_5beta/portmap.c portmap_5beta_fjo/portmap.c --- portmap_5beta/portmap.c Sat Jul 6 23:06:24 1996 +++ portmap_5beta_fjo/portmap.c Sun May 26 18:57:23 2002 @@ -97,6 +97,7 @@ extern char *strerror(); #include +#include #ifndef LOG_PERROR #define LOG_PERROR 0 @@ -157,8 +158,9 @@ struct sockaddr_in addr; int len = sizeof(struct sockaddr_in); register struct pmaplist *pml; + struct hostent *he = NULL; - while ((c = getopt(argc, argv, "dv")) != EOF) { + while ((c = getopt(argc, argv, "dvi:")) != EOF) { switch (c) { case 'd': @@ -169,10 +171,20 @@ verboselog = 1; break; + case 'i': + if ((he = gethostbyname(optarg)) == NULL) { + (void) fprintf(stderr, + "gethostbyname: %m: %s\n", optarg); + exit(1); + } + break; + default: - (void) fprintf(stderr, "usage: %s [-dv]\n", argv[0]); + (void) fprintf(stderr, "usage: %s [-dvi]\n", argv[0]); (void) fprintf(stderr, "-d: debugging mode\n"); (void) fprintf(stderr, "-v: verbose logging\n"); + (void) fprintf(stderr, "-i |: bind only to " + "the specified ip address\n"); exit(1); } } @@ -198,7 +210,12 @@ #endif memset((char *) &addr, 0, sizeof(addr)); - addr.sin_addr.s_addr = 0; + if (he == NULL) { + addr.sin_addr.s_addr = 0; + } else { + memcpy((char*) &addr.sin_addr, *(he->h_addr_list), + he->h_length); + } addr.sin_family = AF_INET; addr.sin_port = htons(PMAPPORT); if (bind(sock, (struct sockaddr *)&addr, len) != 0) {