summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarolin Seeger <kseeger@samba.org>2012-10-31 11:39:34 +0100
committerKarolin Seeger <kseeger@samba.org>2012-10-31 11:39:34 +0100
commit79564b889dba69fa39d9839e5d45457657ab0950 (patch)
tree79d6b08ff43c48c84eef3879c2bc3d84c0bcf503
parentfce3a18d3d5ed46f8e0d1653f862e46b5dff0e03 (diff)
downloadsamba-79564b889dba69fa39d9839e5d45457657ab0950.tar.gz
Revert "Revert "s3-smbd: Don't segfault if user specified ports out for range.""
This reverts commit fce3a18d3d5ed46f8e0d1653f862e46b5dff0e03. This patch does not seem to cause the issue. Sorry for the noise. Karolin
-rw-r--r--source3/smbd/server.c23
1 files changed, 12 insertions, 11 deletions
diff --git a/source3/smbd/server.c b/source3/smbd/server.c
index 63a9869dcef..f34d9f6fdf6 100644
--- a/source3/smbd/server.c
+++ b/source3/smbd/server.c
@@ -560,6 +560,8 @@ static bool open_sockets_smbd(struct smbd_parent_context *parent,
int num_interfaces = iface_count();
int i;
char *ports;
+ char *tok;
+ const char *ptr;
unsigned dns_port = 0;
#ifdef HAVE_ATEXIT
@@ -581,6 +583,16 @@ static bool open_sockets_smbd(struct smbd_parent_context *parent,
ports = talloc_strdup(talloc_tos(), smb_ports);
}
+ for (ptr = ports;
+ next_token_talloc(talloc_tos(),&ptr, &tok, " \t,");) {
+ unsigned port = atoi(tok);
+
+ if (port == 0 || port > 0xffff) {
+ exit_server_cleanly("Invalid port in the config or on "
+ "the commandline specified!");
+ }
+ }
+
if (lp_interfaces() && lp_bind_interfaces_only()) {
/* We have been given an interfaces line, and been
told to only bind to those interfaces. Create a
@@ -592,8 +604,6 @@ static bool open_sockets_smbd(struct smbd_parent_context *parent,
for(i = 0; i < num_interfaces; i++) {
const struct sockaddr_storage *ifss =
iface_n_sockaddr_storage(i);
- char *tok;
- const char *ptr;
if (ifss == NULL) {
DEBUG(0,("open_sockets_smbd: "
@@ -605,9 +615,6 @@ static bool open_sockets_smbd(struct smbd_parent_context *parent,
for (ptr=ports;
next_token_talloc(talloc_tos(),&ptr, &tok, " \t,");) {
unsigned port = atoi(tok);
- if (port == 0 || port > 0xffff) {
- continue;
- }
/* Keep the first port for mDNS service
* registration.
@@ -625,8 +632,6 @@ static bool open_sockets_smbd(struct smbd_parent_context *parent,
/* Just bind to 0.0.0.0 - accept connections
from anywhere. */
- char *tok;
- const char *ptr;
const char *sock_addr = lp_socket_address();
char *sock_tok;
const char *sock_ptr;
@@ -644,11 +649,7 @@ static bool open_sockets_smbd(struct smbd_parent_context *parent,
next_token_talloc(talloc_tos(), &sock_ptr, &sock_tok, " \t,"); ) {
for (ptr=ports; next_token_talloc(talloc_tos(), &ptr, &tok, " \t,"); ) {
struct sockaddr_storage ss;
-
unsigned port = atoi(tok);
- if (port == 0 || port > 0xffff) {
- continue;
- }
/* Keep the first port for mDNS service
* registration.