diff options
author | Jeremy Allison <jra@samba.org> | 2001-06-21 01:01:15 +0000 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2001-06-21 01:01:15 +0000 |
commit | fda0f83d751a1ea6c731fd6a82484a724a1c6e32 (patch) | |
tree | 9238fa62898b269583cbf5f6c0774cbd1ef6702b | |
parent | 3f1254bee1b3cc8cce1e17be6f0250090f579417 (diff) | |
download | samba-fda0f83d751a1ea6c731fd6a82484a724a1c6e32.tar.gz samba-fda0f83d751a1ea6c731fd6a82484a724a1c6e32.tar.bz2 samba-fda0f83d751a1ea6c731fd6a82484a724a1c6e32.zip |
Following info from TAKAHASHI Motonobu <monyo@samba.gr.jp>,
Samba Users Group Japan, ensure that we don't use dos_to_unix(xx,True),
but always use dos_to_unix(xx,False) to prevent overwriting.
Jeremy.
(This used to be commit 244aec8ea623fec828add3ab09c5003bf32bd5c7)
-rw-r--r-- | source3/libsmb/clirap.c | 17 | ||||
-rw-r--r-- | source3/libsmb/clistr.c | 6 | ||||
-rw-r--r-- | source3/smbd/message.c | 5 | ||||
-rw-r--r-- | source3/smbd/reply.c | 10 |
4 files changed, 22 insertions, 16 deletions
diff --git a/source3/libsmb/clirap.c b/source3/libsmb/clirap.c index 5d41af13f9..5050caf073 100644 --- a/source3/libsmb/clirap.c +++ b/source3/libsmb/clirap.c @@ -179,9 +179,12 @@ int cli_RNetShareEnum(struct cli_state *cli, void (*fn)(const char *, uint32, co int type = SVAL(p,14); int comment_offset = IVAL(p,16) & 0xFFFF; char *cmnt = comment_offset?(rdata+comment_offset-converter):""; - dos_to_unix(sname,True); - dos_to_unix(cmnt,True); - fn(sname, type, cmnt, state); + pstring s1, s2; + + pstrcpy(s1, dos_to_unix(sname, False)); + pstrcpy(s2, dos_to_unix(cmnt, False)); + + fn(s1, type, s2, state); } } else { DEBUG(4,("NetShareEnum res=%d\n", res)); @@ -256,13 +259,15 @@ BOOL cli_NetServerEnum(struct cli_state *cli, char *workgroup, uint32 stype, char *sname = p; int comment_offset = (IVAL(p,22) & 0xFFFF)-converter; char *cmnt = comment_offset?(rdata+comment_offset):""; + pstring s1, s2; + if (comment_offset < 0 || comment_offset > rdrcnt) continue; stype = IVAL(p,18) & ~SV_TYPE_LOCAL_LIST_ONLY; - dos_to_unix(sname, True); - dos_to_unix(cmnt, True); - fn(sname, stype, cmnt, state); + pstrcpy(s1, dos_to_unix(sname, False)); + pstrcpy(s2, dos_to_unix(cmnt, False)); + fn(s1, stype, s2, state); } } } diff --git a/source3/libsmb/clistr.c b/source3/libsmb/clistr.c index 0225797538..887b5e84c1 100644 --- a/source3/libsmb/clistr.c +++ b/source3/libsmb/clistr.c @@ -112,7 +112,8 @@ int clistr_pull(struct cli_state *cli, char *dest, const void *src, int dest_len memcpy(dest, src, len); dest[len] = 0; } - if (flags & STR_CONVERT) dos_to_unix(dest,True); + if (flags & STR_CONVERT) + safe_strcpy(dest,dos_to_unix(dest,False),dest_len); return len; } @@ -129,7 +130,8 @@ int clistr_pull(struct cli_state *cli, char *dest, const void *src, int dest_len *dest++ = 0; len = src_len; } - if (flags & STR_CONVERT) dos_to_unix(dest,True); + if (flags & STR_CONVERT) + safe_strcpy(dest,dos_to_unix(dest,False),dest_len); return len; } diff --git a/source3/smbd/message.c b/source3/smbd/message.c index 98eb336c0a..a023650c74 100644 --- a/source3/smbd/message.c +++ b/source3/smbd/message.c @@ -61,13 +61,12 @@ static void msg_deliver(void) } /* - * Incoming message is in DOS codepage format. Convert to UNIX in - * place. + * Incoming message is in DOS codepage format. Convert to UNIX. */ if(msgpos > 0) { msgbuf[msgpos] = '\0'; /* Ensure null terminated. */ - dos_to_unix(msgbuf,True); + pstrcpy(msgbuf,dos_to_unix(msgbuf,False)); } for (i=0;i<msgpos;) { diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c index 2f9898616c..e0b0cea2d3 100644 --- a/source3/smbd/reply.c +++ b/source3/smbd/reply.c @@ -209,9 +209,9 @@ int reply_tcon(connection_struct *conn, * Ensure the user and password names are in UNIX codepage format. */ - dos_to_unix(user,True); + pstrcpy(user,dos_to_unix(user,False)); if (!doencrypt) - dos_to_unix(password,True); + pstrcpy(password,dos_to_unix(password,False)); /* * Pass the user through the NT -> unix user mapping @@ -797,8 +797,8 @@ int reply_sesssetup_and_X(connection_struct *conn, char *inbuf,char *outbuf,int * Ensure the plaintext passwords are in UNIX format. */ if(!doencrypt) { - dos_to_unix(smb_apasswd,True); - dos_to_unix(smb_ntpasswd,True); + pstrcpy(smb_apasswd,dos_to_unix(smb_apasswd,False)); + pstrcpy(smb_ntpasswd,dos_to_unix(smb_ntpasswd,False)); } } else { @@ -808,7 +808,7 @@ int reply_sesssetup_and_X(connection_struct *conn, char *inbuf,char *outbuf,int /* * Ensure the plaintext password is in UNIX format. */ - dos_to_unix(smb_apasswd,True); + pstrcpy(smb_apasswd,dos_to_unix(smb_apasswd,False)); /* trim the password */ smb_apasslen = strlen(smb_apasswd); |