summaryrefslogtreecommitdiffstats
path: root/source
diff options
context:
space:
mode:
Diffstat (limited to 'source')
-rw-r--r--source/libsmb/clientgen.c13
-rw-r--r--source/smbd/password.c78
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;
}
/****************************************************************************