diff options
author | Oliver Lehmann <oliver@FreeBSD.org> | 2011-06-09 11:47:43 +0000 |
---|---|---|
committer | Oliver Lehmann <oliver@FreeBSD.org> | 2011-06-09 11:47:43 +0000 |
commit | b914be2d256af105cafb621e21dcfb967a243cf9 (patch) | |
tree | 29d27a0e1b4b32f114fc5d2f061aec33bb4a939b /security/oidentd | |
parent | 2e3a5a82398842cc4a33b35359cae9a43dd0c12d (diff) |
Notes
Diffstat (limited to 'security/oidentd')
-rw-r--r-- | security/oidentd/Makefile | 2 | ||||
-rw-r--r-- | security/oidentd/files/patch-oidentd-multiple-ip | 137 |
2 files changed, 138 insertions, 1 deletions
diff --git a/security/oidentd/Makefile b/security/oidentd/Makefile index d4a0f2ca89ba..c2b9c132345b 100644 --- a/security/oidentd/Makefile +++ b/security/oidentd/Makefile @@ -7,7 +7,7 @@ PORTNAME= oidentd PORTVERSION= 2.0.8 -PORTREVISION= 1 +PORTREVISION= 2 CATEGORIES= security MASTER_SITES= SF/ojnk/${PORTNAME}/${PORTVERSION} diff --git a/security/oidentd/files/patch-oidentd-multiple-ip b/security/oidentd/files/patch-oidentd-multiple-ip new file mode 100644 index 000000000000..2d54a184922d --- /dev/null +++ b/security/oidentd/files/patch-oidentd-multiple-ip @@ -0,0 +1,137 @@ +diff -ur doc/oidentd.8 doc/oidentd.8.orig +--- doc/oidentd.8.orig 2003-07-13 20:27:52.000000000 +0200 ++++ doc/oidentd.8 2008-04-14 15:04:26.000000000 +0200 +@@ -50,7 +50,7 @@ + + .TP + .B "\-a or \-\-address=<address|hostname>" +-Listen for connections on the specified address. The default is to listen for connections on all configured IP addresses. ++Listen for connections on the specified address, this option can be specified multiple times. The default is to listen for connections on all configured IP addresses. + + .TP + .B "\-c or \-\-charset=<charset>" +diff -ur src/oidentd.c src/oidentd.c.orig +--- src/oidentd.c.orig 2006-05-22 02:43:26.000000000 +0200 ++++ src/oidentd.c 2008-04-14 14:55:07.000000000 +0200 +@@ -73,7 +73,7 @@ + char *config_file; + + in_port_t listen_port; +-struct sockaddr_storage *addr; ++struct sockaddr_storage **addr; + + int main(int argc, char **argv) { + int *listen_fds = NULL; +diff -ur src/oidentd_inet_util.c src/oidentd_inet_util.c.orig +--- src/oidentd_inet_util.c.orig 2006-05-22 02:31:19.000000000 +0200 ++++ src/oidentd_inet_util.c 2008-04-14 15:00:37.000000000 +0200 +@@ -92,16 +92,18 @@ + ** Setup the listening socket(s). + */ + +-int *setup_listen(struct sockaddr_storage *listen_addr, in_port_t listen_port) { ++int *setup_listen(struct sockaddr_storage **listen_addr, in_port_t listen_port) { + int ret; +- int *bound_fds; ++ int *bound_fds = NULL; + u_char listen_port_str[64]; + struct addrinfo hints, *res, *cur; ++ int naddr = 0; + + if (listen_addr != NULL) { ++ do { + cur = xcalloc(1, sizeof(struct addrinfo)); + +- cur->ai_family = listen_addr->ss_family; ++ cur->ai_family = listen_addr[naddr]->ss_family; + + switch (cur->ai_family) { + #ifdef WANT_IPV6 +@@ -115,20 +117,22 @@ + } + + cur->ai_addr = xmalloc(cur->ai_addrlen); +- memcpy(cur->ai_addr, listen_addr, cur->ai_addrlen); ++ memcpy(cur->ai_addr, listen_addr[naddr], cur->ai_addrlen); + + ret = setup_bind(cur, listen_port); + free(cur->ai_addr); + free(cur); +- free(listen_addr); ++ free(listen_addr[naddr]); + + if (ret == -1) + return (NULL); + +- bound_fds = xmalloc(2 * sizeof(int)); +- bound_fds[0] = ret; +- bound_fds[1] = -1; +- ++ bound_fds = xrealloc(bound_fds, (naddr + 2) * sizeof(int)); ++ bound_fds[naddr] = ret; ++ bound_fds[naddr+1] = -1; ++ naddr++; ++ } while (listen_addr[naddr] != NULL); ++ free(listen_addr); + return (bound_fds); + } + +diff -ur src/oidentd_inet_util.h src/oidentd_inet_util.h.orig +--- src/oidentd_inet_util.h.orig 2006-05-22 00:52:24.000000000 +0200 ++++ src/oidentd_inet_util.h 2008-04-14 15:00:26.000000000 +0200 +@@ -22,7 +22,7 @@ + #define SIN4(x) ((struct sockaddr_in *) (x)) + #define SIN6(x) ((struct sockaddr_in6 *) (x)) + +-int *setup_listen(struct sockaddr_storage *listen_addr, in_port_t listen_port); ++int *setup_listen(struct sockaddr_storage **listen_addr, in_port_t listen_port); + + int get_port(const char *name, in_port_t *port); + int get_addr(const char *const hostname, struct sockaddr_storage *g_addr); +diff -ur src/oidentd_options.c src/oidentd_options.c.orig +--- src/oidentd_options.c.orig 2006-05-22 02:31:19.000000000 +0200 ++++ src/oidentd_options.c 2008-04-14 15:00:49.000000000 +0200 +@@ -53,7 +53,7 @@ + extern u_int32_t timeout; + extern u_int32_t connection_limit; + extern in_port_t listen_port; +-extern struct sockaddr_storage *addr; ++extern struct sockaddr_storage **addr; + extern uid_t uid; + extern gid_t gid; + +@@ -126,6 +126,7 @@ + int opt; + char *temp_os; + char *charset = NULL; ++ int naddrs = 0; + + #ifdef MASQ_SUPPORT + if (get_port(DEFAULT_FPORT, &fwdport) == -1) { +@@ -151,13 +152,16 @@ + struct sockaddr_storage *temp_ss = + xmalloc(sizeof(struct sockaddr_storage)); + ++ if (naddrs % 16 == 0) ++ addr = xrealloc(addr, sizeof(struct sockaddr_storage *)*(naddrs+16)); ++ + if (get_addr(optarg, temp_ss) == -1) { + o_log(NORMAL, "Fatal: Unknown host: \"%s\"", optarg); + free(temp_ss); + return (-1); + } + +- addr = temp_ss; ++ addr[naddrs++] = temp_ss; + break; + } + +@@ -327,6 +331,8 @@ + return (-1); + } + } ++ if (addr != NULL) ++ addr[naddrs] = NULL; + + if (charset != NULL) { + size_t len = strlen(temp_os) + strlen(charset) + 4; |