Revert "s3-smbd: Don't segfault if user specified ports out for range."
authorKarolin Seeger <kseeger@samba.org>
Thu, 18 Oct 2012 09:48:16 +0000 (11:48 +0200)
committerKarolin Seeger <kseeger@samba.org>
Thu, 18 Oct 2012 09:58:57 +0000 (11:58 +0200)
This reverts commit 60b15f3b646d10e027e8288132db5b942261de8f.

This commit seems to break 'make test' on my system, so reverting it for now.
(Bug report has been re-opened, see
https://bugzilla.samba.org/show_bug.cgi?id=9218
for details).

source3/smbd/server.c

index f34d9f6fdf6d13904873958f3977f999cee9d93b..63a9869dcef367fe653afc8747b138e1f9ee1ae9 100644 (file)
@@ -560,8 +560,6 @@ 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
@@ -583,16 +581,6 @@ 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
@@ -604,6 +592,8 @@ 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: "
@@ -615,6 +605,9 @@ 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.
@@ -632,6 +625,8 @@ 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;
@@ -649,7 +644,11 @@ 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.