Correctly convert from little-endian UNICODE to dos_codepage when doing
authorJeremy Allison <jra@samba.org>
Wed, 22 Mar 2000 20:29:26 +0000 (20:29 +0000)
committerJeremy Allison <jra@samba.org>
Wed, 22 Mar 2000 20:29:26 +0000 (20:29 +0000)
secure file create.
Jeremy.

source/include/proto.h
source/lib/util_unistr.c
source/smbd/nttrans.c

index 793b01c4c0a71c21442c967c37f0e0bc077f310b..abe49dd0111739a01e432a40ba14a6bbee14cddd 100644 (file)
@@ -191,7 +191,7 @@ int sys_getgroups(int setlen, gid_t *gidset);
 int sys_setgroups(int setlen, gid_t *gidset);
 struct passwd *sys_getpwnam(const char *name);
 struct passwd *sys_getpwuid(uid_t uid);
-FILE *sys_popen(const char *command, const char *mode, BOOL paraniod);
+FILE *sys_popen(const char *command, const char *mode, BOOL paranoid);
 int sys_pclose( FILE *fp);
 
 /*The following definitions come from  lib/talloc.c  */
index 7d1c61d900bda3a31cf27f8c692455da0654cd19..69f554a4c70f5681912dd7910e3225e23a5ffee9 100644 (file)
@@ -91,6 +91,8 @@ char *skip_unicode_string(char *buf,int n)
 
 /*******************************************************************
  Return a DOS codepage version of a little-endian unicode string.
+ len is the filename length (ignoring any terminating zero) in uin16
+ units. Always null terminates.
  Hack alert: uses fixed buffer(s).
 ********************************************************************/
 
index f28823368348eb71063074e6be3761daace90a35..d3d1675a7e1811346f49dfc66760b9639e2b6965 100644 (file)
@@ -243,19 +243,6 @@ static int send_nt_replies(char *inbuf, char *outbuf, int bufsize, uint32 nt_err
  strings in NT calls AND DOESN'T SET THE UNICODE BIT !!!!!!!
 ****************************************************************************/
 
-static void my_wcstombs(char *dst, uint16 *src, size_t len)
-{
-  size_t i;
-
-  for(i = 0; i < len; i++)
-    dst[i] = (char)SVAL(src,i*2);
-}
-
-/****************************************************************************
- (Hopefully) temporary call to fix bugs in NT5.0beta2. This OS sends unicode
- strings in NT calls AND DOESN'T SET THE UNICODE BIT !!!!!!!
-****************************************************************************/
-
 static void get_filename( char *fname, char *inbuf, int data_offset, int data_len, int fname_len)
 {
   /*
@@ -276,11 +263,11 @@ static void get_filename( char *fname, char *inbuf, int data_offset, int data_le
     fname_len = fname_len/2;
     if(data_offset & 1)
       data_offset++;
-    my_wcstombs( fname, (uint16 *)(inbuf+data_offset), fname_len);
+    pstrcpy(fname, dos_unistrn2((uint16 *)(inbuf+data_offset), fname_len));
   } else {
     StrnCpy(fname,inbuf+data_offset,fname_len);
+    fname[fname_len] = '\0';
   }
-  fname[fname_len] = '\0';
 }
 
 /****************************************************************************
@@ -311,11 +298,11 @@ static void get_filename_transact( char *fname, char *inbuf, int data_offset, in
     fname_len = fname_len/2;
     if(data_offset & 1)
       data_offset++;
-    my_wcstombs( fname, (uint16 *)(inbuf+data_offset), fname_len);
+    pstrcpy(fname, dos_unistrn2((uint16 *)(inbuf+data_offset), fname_len));
   } else {
     StrnCpy(fname,inbuf+data_offset,fname_len);
+    fname[fname_len] = '\0';
   }
-  fname[fname_len] = '\0';
 }
 
 /****************************************************************************