diff options
Diffstat (limited to 'source')
-rw-r--r-- | source/libsmb/clientgen.c | 13 | ||||
-rw-r--r-- | source/smbd/password.c | 78 |
2 files changed, 15 insertions, 76 deletions
diff --git a/source/libsmb/clientgen.c b/source/libsmb/clientgen.c index 99d868e216a..5bae8ffa81c 100644 --- a/source/libsmb/clientgen.c +++ b/source/libsmb/clientgen.c @@ -2728,7 +2728,7 @@ BOOL cli_connect_serverlist(struct cli_state *cli, char *p) extern pstring scope; fstring remote_machine; struct in_addr dest_ip; - struct nmb_name calling, called; + struct nmb_name calling, called, stupid_smbserver_called; BOOL connected_ok = False; /* @@ -2763,19 +2763,28 @@ BOOL cli_connect_serverlist(struct cli_state *cli, char *p) make_nmb_name(&calling, global_myname , 0x0 , scope); make_nmb_name(&called , remote_machine, 0x20, scope); + /* stupid microsoft destruction of the ability of netbios + * to provide multiple netbios servers on one host. + */ + make_nmb_name(&stupid_smbserver_called , "*SMBSERVER", 0x20, scope); pwd_set_nullpwd(&cli->pwd); if (!cli_establish_connection(cli, remote_machine, &dest_ip, &calling, &called, "IPC$", "IPC", + False, True) && + !cli_establish_connection(cli, remote_machine, &dest_ip, + &calling, &stupid_smbserver_called, + "IPC$", "IPC", False, True)) { cli_shutdown(cli); continue; } - if (!IS_BITS_SET_ALL(cli->sec_mode, 1)) + if (cli->protocol < PROTOCOL_LANMAN2 || + !IS_BITS_SET_ALL(cli->sec_mode, 1)) { DEBUG(1,("cli_connect_serverlist: machine %s isn't in user level security mode\n", remote_machine)); diff --git a/source/smbd/password.c b/source/smbd/password.c index 726d93e4049..7eed028a80e 100644 --- a/source/smbd/password.c +++ b/source/smbd/password.c @@ -909,81 +909,11 @@ support for server level security ****************************************************************************/ struct cli_state *server_cryptkey(void) { - struct cli_state *cli; - fstring desthost; - struct in_addr dest_ip; - extern fstring local_machine; - char *p; - BOOL connected_ok = False; - struct nmb_name calling, called; - - cli = server_client(); - - if (!cli_initialise(cli)) - return NULL; - - p = lp_passwordserver(); - while(p && next_token( &p, desthost, LIST_SEP, sizeof(desthost))) { - standard_sub_basic(desthost); - strupper(desthost); - - if(!resolve_name( desthost, &dest_ip, 0x20)) { - DEBUG(1,("server_cryptkey: Can't resolve address for %s\n",desthost)); - continue; - } - - if (ismyip(dest_ip)) { - DEBUG(1,("Password server loop - disabling password server %s\n",desthost)); - continue; - } - - if (cli_connect(cli, desthost, &dest_ip)) { - DEBUG(3,("connected to password server %s\n",desthost)); - connected_ok = True; - break; - } - } - - if (!connected_ok) { - DEBUG(0,("password server not available\n")); - cli_shutdown(cli); - return NULL; - } - - make_nmb_name(&calling, local_machine, 0x0 , scope); - make_nmb_name(&called , desthost , 0x20, scope); - - if (!cli_session_request(cli, &calling, &called)) { - /* try with *SMBSERVER if the first name fails */ - cli_shutdown(cli); - make_nmb_name(&called , "*SMBSERVER", 0x20, scope); - if (!cli_initialise(cli) || - !cli_connect(cli, desthost, &dest_ip) || - !cli_session_request(cli, &calling, &called)) { - DEBUG(1,("%s rejected the session\n",desthost)); - cli_shutdown(cli); - return NULL; - } - } - - DEBUG(3,("got session\n")); - - if (!cli_negprot(cli)) { - DEBUG(1,("%s rejected the negprot\n",desthost)); - cli_shutdown(cli); - return NULL; - } - - if (cli->protocol < PROTOCOL_LANMAN2 || - !(cli->sec_mode & 1)) { - DEBUG(1,("%s isn't in user level security mode\n",desthost)); - cli_shutdown(cli); - return NULL; + if (cli_connect_serverlist(server_client(), lp_passwordserver())) + { + return server_client(); } - - DEBUG(3,("password server OK\n")); - - return cli; + return NULL; } /**************************************************************************** |