Lines 158-164
Link Here
|
158 |
int len = sizeof(struct sockaddr_in); |
158 |
int len = sizeof(struct sockaddr_in); |
159 |
register struct pmaplist *pml; |
159 |
register struct pmaplist *pml; |
160 |
|
160 |
|
161 |
while ((c = getopt(argc, argv, "dv")) != EOF) { |
161 |
while ((c = getopt(argc, argv, "dvl")) != EOF) { |
162 |
switch (c) { |
162 |
switch (c) { |
163 |
|
163 |
|
164 |
case 'd': |
164 |
case 'd': |
Lines 169-178
Link Here
|
169 |
verboselog = 1; |
169 |
verboselog = 1; |
170 |
break; |
170 |
break; |
171 |
|
171 |
|
|
|
172 |
case 'l': |
173 |
listenonlyloopback = 1; |
174 |
break; |
175 |
|
172 |
default: |
176 |
default: |
173 |
(void) fprintf(stderr, "usage: %s [-dv]\n", argv[0]); |
177 |
(void) fprintf(stderr, "usage: %s [-dv]\n", argv[0]); |
174 |
(void) fprintf(stderr, "-d: debugging mode\n"); |
178 |
(void) fprintf(stderr, "-d: debugging mode\n"); |
175 |
(void) fprintf(stderr, "-v: verbose logging\n"); |
179 |
(void) fprintf(stderr, "-v: verbose logging\n"); |
|
|
180 |
(void) fprintf(stderr, "-l: listen only on loopback address (not on external address)\n"); |
176 |
exit(1); |
181 |
exit(1); |
177 |
} |
182 |
} |
178 |
} |
183 |
} |
Lines 201-206
Link Here
|
201 |
addr.sin_addr.s_addr = 0; |
206 |
addr.sin_addr.s_addr = 0; |
202 |
addr.sin_family = AF_INET; |
207 |
addr.sin_family = AF_INET; |
203 |
addr.sin_port = htons(PMAPPORT); |
208 |
addr.sin_port = htons(PMAPPORT); |
|
|
209 |
|
210 |
if (listenonlyloopback) { |
211 |
addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK); |
212 |
} |
213 |
|
204 |
if (bind(sock, (struct sockaddr *)&addr, len) != 0) { |
214 |
if (bind(sock, (struct sockaddr *)&addr, len) != 0) { |
205 |
syslog(LOG_ERR, "cannot bind udp: %m"); |
215 |
syslog(LOG_ERR, "cannot bind udp: %m"); |
206 |
exit(1); |
216 |
exit(1); |