summaryrefslogtreecommitdiff
path: root/source3/smbd/reply.c
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>1996-10-05 13:13:31 +0000
committerAndrew Tridgell <tridge@samba.org>1996-10-05 13:13:31 +0000
commitf3c79936d7fc21d3257432962b23764ca00b0cbb (patch)
tree8f942150cf4c7b549ea5e7aa3175ee6e1f61df98 /source3/smbd/reply.c
parentf6153293603e8413933e8d539df4f2c0b18a6a4c (diff)
downloadsamba-f3c79936d7fc21d3257432962b23764ca00b0cbb.tar.gz
samba-f3c79936d7fc21d3257432962b23764ca00b0cbb.tar.bz2
samba-f3c79936d7fc21d3257432962b23764ca00b0cbb.zip
- replace the base36 function with one that works on more systems
(compiler bugs were the problem) - minor password cleanups (catch WfWG bug where it sets the password to a space instead of a NULL) - fix printing problem for kanji users - minor cleanups (This used to be commit 92566ecc315c29da6e9aaa67ddae33e64f5bcc67)
Diffstat (limited to 'source3/smbd/reply.c')
-rw-r--r--source3/smbd/reply.c32
1 files changed, 24 insertions, 8 deletions
diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c
index 7b8f4a502f..89b07f1b9e 100644
--- a/source3/smbd/reply.c
+++ b/source3/smbd/reply.c
@@ -181,7 +181,7 @@ int reply_tcon(char *inbuf,char *outbuf)
int outsize = 0;
int uid = SVAL(inbuf,smb_uid);
int vuid;
- int pwlen;
+ int pwlen=0;
*service = *user = *password = *dev = 0;
@@ -218,6 +218,7 @@ int reply_tcon_and_X(char *inbuf,char *outbuf,int length,int bufsize)
int uid = SVAL(inbuf,smb_uid);
int vuid;
int passlen = SVAL(inbuf,smb_vwv3);
+ BOOL doencrypt = SMBENCRYPT();
*service = *user = *password = *devicename = 0;
@@ -231,8 +232,15 @@ int reply_tcon_and_X(char *inbuf,char *outbuf,int length,int bufsize)
char *path;
char *p;
memcpy(password,smb_buf(inbuf),passlen);
- password[passlen]=0;
+ password[passlen]=0;
path = smb_buf(inbuf) + passlen;
+
+ if (!doencrypt || passlen != 24) {
+ if (strequal(password," "))
+ *password = 0;
+ passlen = strlen(password);
+ }
+
DEBUG(4,("parsing net-path %s, passlen=%d\n",path,passlen));
strcpy(service,path+2);
p = strchr(service,'\\');
@@ -315,7 +323,7 @@ int reply_sesssetup_and_X(char *inbuf,char *outbuf,int length,int bufsize)
int smb_mpxmax;
int smb_vc_num;
uint32 smb_sesskey;
- int smb_apasslen;
+ int smb_apasslen = 0;
pstring smb_apasswd;
int smb_ntpasslen = 0;
pstring smb_ntpasswd;
@@ -343,6 +351,9 @@ int reply_sesssetup_and_X(char *inbuf,char *outbuf,int length,int bufsize)
BOOL doencrypt = SMBENCRYPT();
char *p = smb_buf(inbuf);
+ if (passlen1 != 24 && passlen2 != 24)
+ doencrypt = False;
+
if(doencrypt) {
/* Save the lanman2 password and the NT md4 password. */
smb_apasslen = passlen1;
@@ -366,17 +377,22 @@ int reply_sesssetup_and_X(char *inbuf,char *outbuf,int length,int bufsize)
}
/* we use the first password that they gave */
smb_apasslen = passlen1;
- StrnCpy(smb_apasswd,p,smb_apasslen);
+ StrnCpy(smb_apasswd,p,smb_apasslen);
+
+ /* trim the password */
+ smb_apasslen = strlen(smb_apasswd);
+
+ /* wfwg sometimes uses a space instead of a null */
+ if (strequal(smb_apasswd," ")) {
+ smb_apasslen = 0;
+ *smb_apasswd = 0;
+ }
}
p += passlen1 + passlen2;
strcpy(user,p); p = skip_string(p,1);
DEBUG(3,("Domain=[%s] NativeOS=[%s] NativeLanMan=[%s]\n",
p,skip_string(p,1),skip_string(p,2)));
-
- /* now work around the Win95 bug */
- if(!doencrypt && smb_apasslen==24)
- smb_apasslen = strlen(smb_apasswd);
}