1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- diff -ruNp tcp_wrappers_7.6.orig/hosts_access.c tcp_wrappers_7.6/hosts_access.c
- --- tcp_wrappers_7.6.orig/hosts_access.c 2007-01-08 01:31:32.000000000 +0100
- +++ tcp_wrappers_7.6/hosts_access.c 2007-01-08 01:31:08.000000000 +0100
- @@ -232,6 +232,36 @@ int (*match_fn) ();
- return (NO);
- }
-
- +/*
- + * daemon_or_port_match - match server information: if the server endpoint
- + * pattern is a port number, match against port number of connection;
- + * otherwise match against daemon executable name
- + */
- +
- +static int daemon_or_port_match(char *tok, struct request_info *request) {
- + unsigned int port, sin_port;
- + char junk;
- +
- + /* daemon name */
- + if (sscanf(tok, "%u%c", &port, &junk) != 1 || port > 65535)
- + return (string_match(tok, eval_daemon(request)));
- +
- + /* port number */
- + if (!request->server->sin)
- + return (NO);
- +
- +#ifdef INET6
- + sin_port = ntohs(((struct sockaddr_in *)request->server->sin)->sin_port);
- +#else
- + sin_port = ntohs(request->server->sin->sin_port);
- +#endif
- +
- + if (port == sin_port)
- + return (YES);
- + else
- + return (NO);
- +}
- +
- /* server_match - match server information */
-
- static int server_match(tok, request)
- @@ -241,9 +271,9 @@ struct request_info *request;
- char *host;
-
- if ((host = split_at(tok + 1, '@')) == 0) { /* plain daemon */
- - return (string_match(tok, eval_daemon(request)));
- + return (daemon_or_port_match(tok, request));
- } else { /* daemon@host */
- - return (string_match(tok, eval_daemon(request))
- + return (daemon_or_port_match(tok, request)
- && host_match(host, request->server));
- }
- }
- diff -ruNp tcp_wrappers_7.6.orig/hosts_access.5 tcp_wrappers_7.6/hosts_access.5
- --- tcp_wrappers_7.6.orig/hosts_access.5 2007-01-08 01:31:32.000000000 +0100
- +++ tcp_wrappers_7.6/hosts_access.5 2007-01-08 01:30:18.000000000 +0100
- @@ -51,7 +51,7 @@ being optional:
- daemon_list : client_list [ : shell_command ]
- .PP
- \fIdaemon_list\fR is a list of one or more daemon process names
- -(argv[0] values) or wildcards (see below).
- +(argv[0] values) or server port numbers or wildcards (see below).
- .PP
- \fIclient_list\fR is a list
- of one or more host names, host addresses, patterns or wildcards (see
|