diff options
author | Andrew Tridgell <tridge@samba.org> | 1996-10-05 13:13:31 +0000 |
---|---|---|
committer | Andrew Tridgell <tridge@samba.org> | 1996-10-05 13:13:31 +0000 |
commit | f3c79936d7fc21d3257432962b23764ca00b0cbb (patch) | |
tree | 8f942150cf4c7b549ea5e7aa3175ee6e1f61df98 /source3/smbd | |
parent | f6153293603e8413933e8d539df4f2c0b18a6a4c (diff) | |
download | samba-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')
-rw-r--r-- | source3/smbd/mangle.c | 9 | ||||
-rw-r--r-- | source3/smbd/reply.c | 32 | ||||
-rw-r--r-- | source3/smbd/server.c | 2 |
3 files changed, 28 insertions, 15 deletions
diff --git a/source3/smbd/mangle.c b/source3/smbd/mangle.c index 177a34c975..6d98d9e39c 100644 --- a/source3/smbd/mangle.c +++ b/source3/smbd/mangle.c @@ -383,13 +383,10 @@ BOOL is_mangled(char *s) /**************************************************************************** return a base 36 character. v must be from 0 to 35. ****************************************************************************/ -static char base36(int v) +static char base36(unsigned int v) { - v = v % 36; - if (v < 10) - return('0'+v); - else /* needed to work around a DEC C compiler bug */ - return('A' + (v-10)); + static char basechars[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + return basechars[v % 36]; } 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); } diff --git a/source3/smbd/server.c b/source3/smbd/server.c index e0e9838a74..5db62426ca 100644 --- a/source3/smbd/server.c +++ b/source3/smbd/server.c @@ -841,7 +841,7 @@ void open_file(int fnum,int cnum,char *fname1,int flags,int mode) Files[fnum].print_file = Connections[cnum].printer; Files[fnum].modified = False; Files[fnum].cnum = cnum; - string_set(&Files[fnum].name,fname); + string_set(&Files[fnum].name,dos_to_unix(fname,False)); Files[fnum].wbmpx_ptr = NULL; /* |