s3-smbd: Don't segfault if user specified ports out for range.
authorAndreas Schneider <asn@samba.org>
Tue, 25 Sep 2012 12:28:22 +0000 (14:28 +0200)
committerKarolin Seeger <kseeger@samba.org>
Fri, 28 Sep 2012 09:02:16 +0000 (11:02 +0200)
Autobuild-User(master): Andreas Schneider <asn@cryptomilk.org>
Autobuild-Date(master): Wed Sep 26 16:28:44 CEST 2012 on sn-devel-104
(cherry picked from commit 50d324b7e070de4672eff3fb6231923e6dca807a)

Signed-off-by: Andreas Schneider <asn@samba.org>
Fix bug #9218 - Samba panics if a user specifies an invalid port number.

Autobuild-User(v4-0-test): Karolin Seeger <kseeger@samba.org>
Autobuild-Date(v4-0-test): Fri Sep 28 11:02:16 CEST 2012 on sn-devel-104

source3/smbd/server.c

index 15762d84e9d4d43088054fe6adac19e744d79e08..90bbb62ef7f57d1564eb43d4b1cd7c9067322d7a 100644 (file)
@@ -752,6 +752,15 @@ static bool open_sockets_smbd(struct smbd_parent_context *parent,
                ports = (const char **)str_list_make_v3(talloc_tos(), smb_ports, NULL);
        }
 
+       for (j = 0; ports && ports[j]; j++) {
+               unsigned port = atoi(ports[j]);
+
+               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
@@ -772,9 +781,6 @@ static bool open_sockets_smbd(struct smbd_parent_context *parent,
 
                        for (j = 0; ports && ports[j]; j++) {
                                unsigned port = atoi(ports[j]);
-                               if (port == 0 || port > 0xffff) {
-                                       continue;
-                               }
 
                                /* Keep the first port for mDNS service
                                 * registration.
@@ -810,11 +816,7 @@ static bool open_sockets_smbd(struct smbd_parent_context *parent,
                     next_token_talloc(talloc_tos(), &sock_ptr, &sock_tok, " \t,"); ) {
                        for (j = 0; ports && ports[j]; j++) {
                                struct sockaddr_storage ss;
-
                                unsigned port = atoi(ports[j]);
-                               if (port == 0 || port > 0xffff) {
-                                       continue;
-                               }
 
                                /* Keep the first port for mDNS service
                                 * registration.