]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
fixed a bug in the name mangling code. It implicitly assumed that
authorAndrew Tridgell <tridge@samba.org>
Thu, 3 Sep 1998 03:14:31 +0000 (03:14 +0000)
committerAndrew Tridgell <tridge@samba.org>
Thu, 3 Sep 1998 03:14:31 +0000 (03:14 +0000)
mangling a name can't increase it's size which isn't true. (imagine a
file called "L B" which mangles to "LB~XX")

The symptoms were that users couldn't run batch files from short
directory names that contained non 8.3 characters (such as spaces).

source/include/proto.h
source/smbd/filename.c
source/smbd/mangle.c

index 01ae342f98fe78f4d31341c9fe0d918d206d468a..969b8c6a86ef5d53900f25aa9dd4bf2d763da395 100644 (file)
@@ -170,7 +170,7 @@ int dos_open(char *fname,int flags,int mode);
 DIR *dos_opendir(char *dname);
 int dos_stat(char *fname,SMB_STRUCT_STAT *sbuf);
 int sys_waitpid(pid_t pid,int *status,int options);
-int dos_lstat(char *fname,struct stat *sbuf);
+int dos_lstat(char *fname,SMB_STRUCT_STAT *sbuf);
 int dos_mkdir(char *dname,int mode);
 int dos_rmdir(char *dname);
 int dos_chdir(char *dname);
@@ -305,7 +305,6 @@ int set_filelen(int fd, long len);
 int byte_checksum(char *buf,int len);
 char *dirname_dos(char *path,char *buf);
 void *Realloc(void *p,int size);
-void Abort(void );
 BOOL get_myname(char *my_name,struct in_addr *ip);
 BOOL ip_equal(struct in_addr ip1,struct in_addr ip2);
 int open_socket_in(int type, int port, int dlevel,uint32 socket_addr);
@@ -2052,8 +2051,8 @@ BOOL is_mangled( char *s );
 BOOL is_8_3( char *fname, BOOL check_case );
 void reset_mangled_cache( void );
 BOOL check_mangled_cache( char *s );
-void mangle_name_83( char *s, int s_len );
-BOOL name_map_mangle( char *OutName, BOOL need83, int snum );
+void mangle_name_83( char *s);
+BOOL name_map_mangle(char *OutName, BOOL need83, int snum);
 
 /*The following definitions come from  smbd/message.c  */
 
@@ -2291,7 +2290,6 @@ char *quotequotes(char *s);
 void quote_spaces(char *buf);
 void cgi_setup(char *rootdir, int auth_required);
 char *cgi_baseurl(void);
-char *cgi_rooturl(void);
 char *cgi_pathinfo(void);
 char *cgi_remote_host(void);
 char *cgi_remote_addr(void);
index 3bc69210b935ce498039acb382d57d08459704a9..656bb8997c9470ffa3eb96eb401938950802af72 100644 (file)
@@ -77,7 +77,7 @@ BOOL mangled_equal(char *name1, char *name2)
     return(False);
 
   pstrcpy(tmpname,name2);
-  mangle_name_83(tmpname,sizeof(tmpname));
+  mangle_name_83(tmpname);
 
   return(strequal(name1,tmpname));
 }
index 0703a4a74ef83761178ab12609f33536f23bc7d2..0a3d3f54eb7f1135b95c59ae159364692781f8d1 100644 (file)
@@ -799,12 +799,12 @@ static void do_fwd_mangled_map(char *s, char *MangledMap)
     }
   } /* do_fwd_mangled_map */
 
-/* ************************************************************************** **
+/*****************************************************************************
  * do the actual mangling to 8.3 format
- *
- * ************************************************************************** **
+ * the buffer must be able to hold 13 characters (including the null)
+ *****************************************************************************
  */
-void mangle_name_83( char *s, int s_len )
+void mangle_name_83( char *s)
   {
   int csum = str_checksum(s);
   char *p;
@@ -907,7 +907,7 @@ void mangle_name_83( char *s, int s_len )
 
   csum = csum % (36*36);
 
-  (void)slprintf( s, s_len - 1, "%s%c%c%c",
+  (void)slprintf(s, 12, "%s%c%c%c",
                  base, magic_char, base36( csum/36 ), base36( csum ) );
 
   if( *extension )
@@ -917,12 +917,13 @@ void mangle_name_83( char *s, int s_len )
     }
 
   DEBUG( 5, ( "%s\n", s ) );
+
   } /* mangle_name_83 */
 
-/* ************************************************************************** **
+/*****************************************************************************
  * Convert a filename to DOS format.  Return True if successful.
  *
- *  Input:  OutName - Source *and* destination buffer.
+ *  Input:  OutName - Source *and* destination buffer. 
  *
  *                    NOTE that OutName must point to a memory space that
  *                    is at least 13 bytes in size!
@@ -939,47 +940,46 @@ void mangle_name_83( char *s, int s_len )
  *  Output: Returns False only if the name wanted mangling but the share does
  *          not have name mangling turned on.
  *
- * ************************************************************************** **
+ * ****************************************************************************
  */
-BOOL name_map_mangle( char *OutName, BOOL need83, int snum )
-  {
-  DEBUG(5,
-    ("name_map_mangle( %s, %s, %d )\n", OutName, need83?"TRUE":"FALSE", snum) );
+BOOL name_map_mangle(char *OutName, BOOL need83, int snum)
+{
+       char *map;
+       DEBUG(5,("name_map_mangle( %s, %s, %d )\n", 
+                OutName, need83?"TRUE":"FALSE", snum));
 
 #ifdef MANGLE_LONG_FILENAMES
-  if( !need83 && is_illegal_name(OutName) )
-    need83 = True;
+       if( !need83 && is_illegal_name(OutName) )
+               need83 = True;
 #endif  
 
-  /* apply any name mappings */
-  {
-  char *map = lp_mangled_map( snum );
+       /* apply any name mappings */
+       map = lp_mangled_map(snum);
 
-  if( map && *map )
-    do_fwd_mangled_map( OutName, map );
-  }
+       if (map && *map) {
+               do_fwd_mangled_map( OutName, map );
+       }
 
-  /* check if it's already in 8.3 format */
-  if( need83 && !is_8_3( OutName, True ) )
-    {
-    char *tmp;  /* kludge -- mangle_name_83() overwrites the source string    */
-                /* but cache_mangled_name() needs both.  crh 09-Apr-1998      */
+       /* check if it's already in 8.3 format */
+       if (need83 && !is_8_3(OutName, True)) {
+               char *tmp; 
 
-    if( !lp_manglednames( snum ) )
-      return( False );
+               if (!lp_manglednames(snum)) {
+                       return(False);
+               }
 
-    /* mangle it into 8.3 */
-    tmp = strdup( OutName );
-    mangle_name_83( OutName, strlen(OutName) );
-    if( tmp )
-      {
-      cache_mangled_name( OutName, tmp );  
-      free( tmp );
-      }
-    }
+               /* mangle it into 8.3 */
+               tmp = strdup(OutName);
+               mangle_name_83(OutName);
 
-  DEBUG( 5, ("name_map_mangle() ==> [%s]\n", OutName) );
-  return( True );
-  } /* name_map_mangle */
+               if(tmp) {
+                       cache_mangled_name(OutName, tmp);
+                       free(tmp);
+               }
+       }
+
+       DEBUG(5,("name_map_mangle() ==> [%s]\n", OutName));
+       return(True);
+} /* name_map_mangle */
 
 /* ========================================================================== */