diff options
author | Luke Leighton <lkcl@samba.org> | 1999-09-16 22:46:45 +0000 |
---|---|---|
committer | Luke Leighton <lkcl@samba.org> | 1999-09-16 22:46:45 +0000 |
commit | 701f9ed2c97ad50a4258e278a3674b8f5a747d8e (patch) | |
tree | 3a2b15703ad998555b6403fa22c07ea803be894c /source3 | |
parent | b9b4c1d56349824616f2fcaff57cedbc52168059 (diff) | |
download | samba-701f9ed2c97ad50a4258e278a3674b8f5a747d8e.tar.gz samba-701f9ed2c97ad50a4258e278a3674b8f5a747d8e.tar.bz2 samba-701f9ed2c97ad50a4258e278a3674b8f5a747d8e.zip |
reading in smb server domain name from SMBnegprot response
(This used to be commit 25025f450531c66c0fd9f7eed886cb288d76d025)
Diffstat (limited to 'source3')
-rw-r--r-- | source3/libsmb/clientgen.c | 31 | ||||
-rw-r--r-- | source3/rpcclient/rpcclient.c | 2 | ||||
-rw-r--r-- | source3/smbd/negprot.c | 7 |
3 files changed, 30 insertions, 10 deletions
diff --git a/source3/libsmb/clientgen.c b/source3/libsmb/clientgen.c index 3e31b980c4..6d704dc144 100644 --- a/source3/libsmb/clientgen.c +++ b/source3/libsmb/clientgen.c @@ -2400,7 +2400,10 @@ BOOL cli_negprot(struct cli_state *cli) cli->protocol = prots[SVAL(cli->inbuf,smb_vwv0)].prot; - if (cli->protocol >= PROTOCOL_NT1) { + if (cli->protocol >= PROTOCOL_NT1) + { + char *buf = smb_buf(cli->inbuf); + int bcc = SVAL(cli->inbuf,smb_vwv+2*(CVAL(cli->inbuf,smb_wct))); /* NT protocol */ cli->sec_mode = CVAL(cli->inbuf,smb_vwv1); cli->max_mux = SVAL(cli->inbuf, smb_vwv1+1); @@ -2409,13 +2412,26 @@ BOOL cli_negprot(struct cli_state *cli) cli->serverzone = SVALS(cli->inbuf,smb_vwv15+1)*60; /* this time arrives in real GMT */ cli->servertime = interpret_long_date(cli->inbuf+smb_vwv11+1); - memcpy(cli->cryptkey,smb_buf(cli->inbuf),8); + memcpy(cli->cryptkey, buf,8); + if (bcc > 8) + { + unibuf_to_ascii(cli->server_domain, buf+8, + sizeof(cli->server_domain)); + } + else + { + cli->server_domain[0] = 0; + } cli->capabilities = IVAL(cli->inbuf,smb_vwv9+1); if (cli->capabilities & CAP_RAW_MODE) { cli->readbraw_supported = True; cli->writebraw_supported = True; } - } else if (cli->protocol >= PROTOCOL_LANMAN1) { + DEBUG(5,("server's domain: %s bcc: %d\n", + cli->server_domain, bcc)); + } + else if (cli->protocol >= PROTOCOL_LANMAN1) + { cli->sec_mode = SVAL(cli->inbuf,smb_vwv1); cli->max_xmit = SVAL(cli->inbuf,smb_vwv2); cli->sesskey = IVAL(cli->inbuf,smb_vwv6); @@ -2834,6 +2850,12 @@ BOOL cli_establish_connection(struct cli_state *cli, return False; } + if (cli->domain[0] == 0) + { + safe_strcpy(cli->domain, cli->server_domain, + sizeof(cli->domain)); + } + if (cli->pwd.cleartext || cli->pwd.null_pwd) { fstring passwd, ntpasswd; @@ -2885,13 +2907,12 @@ BOOL cli_establish_connection(struct cli_state *cli, unsigned char lm_sess_pwd[24]; unsigned char nt_sess_pwd[128]; size_t nt_sess_pwd_len; - extern pstring global_myname; if (cli->use_ntlmv2 != False) { DEBUG(10,("cli_establish_connection: NTLMv2\n")); pwd_make_lm_nt_owf2(&(cli->pwd), cli->cryptkey, - cli->user_name, global_myname, cli->domain); + cli->user_name, calling->name, cli->domain); } else { diff --git a/source3/rpcclient/rpcclient.c b/source3/rpcclient/rpcclient.c index f33f0fa1dd..2883058812 100644 --- a/source3/rpcclient/rpcclient.c +++ b/source3/rpcclient/rpcclient.c @@ -849,8 +849,6 @@ char *complete_cmd_null(char *text, int state) codepage_initialise(lp_client_code_page()); - if (*smb_cli->domain == 0) pstrcpy(smb_cli->domain,lp_workgroup()); - load_interfaces(); if (cli_action == CLIENT_IPC) diff --git a/source3/smbd/negprot.c b/source3/smbd/negprot.c index 51ec963b8c..0b48b0e2b2 100644 --- a/source3/smbd/negprot.c +++ b/source3/smbd/negprot.c @@ -218,12 +218,13 @@ static int reply_nt1(char *outbuf) if (doencrypt) secword |= 2; /* decide where (if) to put the encryption challenge, and - follow it with the OEM'd domain name + follow it with the OEM'd domain name in Unicode. */ - data_len = crypt_len + strlen(global_myworkgroup) + 1; + data_len = crypt_len + (strlen(global_myworkgroup)+1)*2; set_message(outbuf,17,data_len,True); - pstrcpy(smb_buf(outbuf)+crypt_len, global_myworkgroup); + ascii_to_unibuf(smb_buf(outbuf)+crypt_len, global_myworkgroup, + (strlen(global_myworkgroup)+1)*2); CVAL(outbuf,smb_vwv1) = secword; SSVALS(outbuf,smb_vwv16+1,crypt_len); |