summaryrefslogtreecommitdiff
blob: e34623f6cc357ab995fbfe706b07d5cb236cb2a6 (plain)
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
diff -u portmap_5beta/pmap_check.c portmap_5beta_elros/pmap_check.c
--- portmap_5beta/pmap_check.c	1996-07-07 10:49:10.000000000 +0200
+++ portmap_5beta_elros/pmap_check.c	2004-09-24 01:56:47.000000000 +0200
@@ -63,6 +63,7 @@
 static void logit();
 static void toggle_verboselog();
 int     verboselog = 0;
+int	listenonlyloopback = 0;
 int     allow_severity = LOG_INFO;
 int     deny_severity = LOG_WARNING;
 
diff -u portmap_5beta/pmap_check.h portmap_5beta_elros/pmap_check.h
--- portmap_5beta/pmap_check.h	1996-07-06 23:06:23.000000000 +0200
+++ portmap_5beta_elros/pmap_check.h	2004-09-24 01:55:24.000000000 +0200
@@ -7,6 +7,7 @@
 extern int check_privileged_port();
 extern int check_callit();
 extern int verboselog;
+extern int listenonlyloopback;
 extern int allow_severity;
 extern int deny_severity;
 
diff -u portmap_5beta/portmap.c portmap_5beta_elros/portmap.c
--- portmap_5beta/portmap.c	1996-07-06 23:06:24.000000000 +0200
+++ portmap_5beta_elros/portmap.c	2004-09-24 01:49:47.000000000 +0200
@@ -158,7 +158,7 @@
 	int len = sizeof(struct sockaddr_in);
 	register struct pmaplist *pml;
 
-	while ((c = getopt(argc, argv, "dv")) != EOF) {
+	while ((c = getopt(argc, argv, "dvl")) != EOF) {
 		switch (c) {
 
 		case 'd':
@@ -169,10 +169,15 @@
 			verboselog = 1;
 			break;
 
+		case 'l':
+			listenonlyloopback = 1;
+			break;
+
 		default:
-			(void) fprintf(stderr, "usage: %s [-dv]\n", argv[0]);
+			(void) fprintf(stderr, "usage: %s [-dvl]\n", argv[0]);
 			(void) fprintf(stderr, "-d: debugging mode\n");
 			(void) fprintf(stderr, "-v: verbose logging\n");
+			(void) fprintf(stderr, "-l: listen only on loopback address (not on external address)\n");
 			exit(1);
 		}
 	}
@@ -201,6 +206,11 @@
 	addr.sin_addr.s_addr = 0;
 	addr.sin_family = AF_INET;
 	addr.sin_port = htons(PMAPPORT);
+
+	if (listenonlyloopback) {
+		addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
+	}
+
 	if (bind(sock, (struct sockaddr *)&addr, len) != 0) {
 		syslog(LOG_ERR, "cannot bind udp: %m");
 		exit(1);