diff options
Diffstat (limited to 'source3')
-rw-r--r-- | source3/include/proto.h | 2 | ||||
-rw-r--r-- | source3/param/loadparm.c | 5 | ||||
-rw-r--r-- | source3/smbd/server.c | 31 |
3 files changed, 13 insertions, 25 deletions
diff --git a/source3/include/proto.h b/source3/include/proto.h index 769a300403..4d99a607e3 100644 --- a/source3/include/proto.h +++ b/source3/include/proto.h @@ -1002,7 +1002,7 @@ NTSTATUS change_trust_account_password( const char *domain, const char *remote_m /* The following definitions come from param/loadparm.c */ -const char *lp_smb_ports(void); +const char **lp_smb_ports(void); const char *lp_dos_charset(void); const char *lp_unix_charset(void); char *lp_logfile(TALLOC_CTX *ctx); diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c index 4c21d5032f..00edc3f3d7 100644 --- a/source3/param/loadparm.c +++ b/source3/param/loadparm.c @@ -1533,7 +1533,7 @@ static struct parm_struct parm_table[] = { }, { .label = "smb ports", - .type = P_STRING, + .type = P_LIST, .p_class = P_GLOBAL, .offset = GLOBAL_VAR(smb_ports), .special = NULL, @@ -4925,7 +4925,7 @@ static void init_globals(bool reinit_globals) Globals.server_signing = SMB_SIGNING_DEFAULT; Globals.bDeferSharingViolations = true; - string_set(&Globals.smb_ports, SMB_PORTS); + Globals.smb_ports = (const char **)str_list_make_v3(NULL, SMB_PORTS, NULL); Globals.bEnablePrivileges = true; Globals.bHostMSDfs = true; @@ -5109,7 +5109,6 @@ int lp_cups_encrypt(void) /* These functions remain in source3/param for now */ -FN_GLOBAL_CONST_STRING(smb_ports, smb_ports) FN_GLOBAL_INTEGER(security, security) FN_GLOBAL_INTEGER(usershare_max_shares, iUsershareMaxShares) FN_GLOBAL_STRING(configfile, szConfigFile) diff --git a/source3/smbd/server.c b/source3/smbd/server.c index 28374fa985..f7f1d8c715 100644 --- a/source3/smbd/server.c +++ b/source3/smbd/server.c @@ -733,8 +733,8 @@ static bool open_sockets_smbd(struct smbd_parent_context *parent, const char *smb_ports) { int num_interfaces = iface_count(); - int i; - const char *ports; + int i,j; + const char **ports; unsigned dns_port = 0; #ifdef HAVE_ATEXIT @@ -744,16 +744,11 @@ static bool open_sockets_smbd(struct smbd_parent_context *parent, /* Stop zombies */ smbd_setup_sig_chld_handler(parent); + ports = lp_smb_ports(); + /* use a reasonable default set of ports - listing on 445 and 139 */ - if (!smb_ports) { - ports = lp_smb_ports(); - if (!ports || !*ports) { - ports = talloc_strdup(talloc_tos(), SMB_PORTS); - } else { - ports = talloc_strdup(talloc_tos(), ports); - } - } else { - ports = talloc_strdup(talloc_tos(), smb_ports); + if (smb_ports) { + ports = (const char **)str_list_make_v3(talloc_tos(), smb_ports, NULL); } if (lp_interfaces() && lp_bind_interfaces_only()) { @@ -767,9 +762,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: " "interface %d has NULL IP address !\n", @@ -777,9 +769,8 @@ static bool open_sockets_smbd(struct smbd_parent_context *parent, continue; } - for (ptr=ports; - next_token_talloc(talloc_tos(),&ptr, &tok, " \t,");) { - unsigned port = atoi(tok); + for (j = 0; ports && ports[j]; j++) { + unsigned port = atoi(ports[j]); if (port == 0 || port > 0xffff) { continue; } @@ -804,8 +795,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; @@ -821,10 +810,10 @@ static bool open_sockets_smbd(struct smbd_parent_context *parent, for (sock_ptr=sock_addr; next_token_talloc(talloc_tos(), &sock_ptr, &sock_tok, " \t,"); ) { - for (ptr=ports; next_token_talloc(talloc_tos(), &ptr, &tok, " \t,"); ) { + for (j = 0; ports && ports[j]; j++) { struct sockaddr_storage ss; - unsigned port = atoi(tok); + unsigned port = atoi(ports[j]); if (port == 0 || port > 0xffff) { continue; } |