1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-08 05:57:51 +03:00

r1570: merging changes from 3.0.5

(This used to be commit 430cf63b9148441bce42bfb15a8045de5da108f4)
This commit is contained in:
Gerald Carter 2004-07-22 13:39:43 +00:00 committed by Gerald (Jerry) Carter
parent d810ffe58e
commit 0c6d7f28d6
7 changed files with 28 additions and 22 deletions

View File

@ -8,7 +8,7 @@ struct mangle_fns {
BOOL (*is_mangled)(const char *s); BOOL (*is_mangled)(const char *s);
BOOL (*is_8_3)(const char *fname, BOOL check_case, BOOL allow_wildcards); BOOL (*is_8_3)(const char *fname, BOOL check_case, BOOL allow_wildcards);
void (*reset)(void); void (*reset)(void);
BOOL (*check_cache)(char *s); BOOL (*check_cache)(char *s, size_t maxlen);
void (*name_map)(char *OutName, BOOL need83, BOOL cache83, int default_case); void (*name_map)(char *OutName, BOOL need83, BOOL cache83, int default_case);
}; };
#endif /* _MANGLE_H_ */ #endif /* _MANGLE_H_ */

View File

@ -1949,7 +1949,9 @@ DATA_BLOB base64_decode_data_blob(const char *s)
s++; i++; s++; i++;
} }
if (*s == '=') n -= 1; if ((n > 0) && (*s == '=')) {
n -= 1;
}
/* fix up length */ /* fix up length */
decoded.length = n; decoded.length = n;
@ -1962,9 +1964,15 @@ DATA_BLOB base64_decode_data_blob(const char *s)
void base64_decode_inplace(char *s) void base64_decode_inplace(char *s)
{ {
DATA_BLOB decoded = base64_decode_data_blob(s); DATA_BLOB decoded = base64_decode_data_blob(s);
memcpy(s, decoded.data, decoded.length);
/* null terminate */ if ( decoded.length != 0 ) {
s[decoded.length] = '\0'; memcpy(s, decoded.data, decoded.length);
/* null terminate */
s[decoded.length] = '\0';
} else {
*s = '\0';
}
data_blob_free(&decoded); data_blob_free(&decoded);
} }

View File

@ -326,7 +326,7 @@ BOOL unix_convert(pstring name,connection_struct *conn,char *saved_last_componen
*/ */
if (mangle_is_mangled(start)) { if (mangle_is_mangled(start)) {
mangle_check_cache( start ); mangle_check_cache( start, sizeof(pstring) - 1 - (start - name) );
} }
DEBUG(5,("New file %s\n",start)); DEBUG(5,("New file %s\n",start));
@ -476,7 +476,7 @@ static BOOL scan_directory(const char *path, char *name, size_t maxlength,
* (JRA). * (JRA).
*/ */
if (mangled) if (mangled)
mangled = !mangle_check_cache( name ); mangled = !mangle_check_cache( name, maxlength );
/* open the directory */ /* open the directory */
if (!(cur_dir = OpenDir(conn, path, True))) { if (!(cur_dir = OpenDir(conn, path, True))) {

View File

@ -98,9 +98,9 @@ BOOL mangle_is_8_3_wildcards(const char *fname, BOOL check_case)
looking for a matching name if it doesn't. It should succeed most of the time looking for a matching name if it doesn't. It should succeed most of the time
or there will be a huge performance penalty or there will be a huge performance penalty
*/ */
BOOL mangle_check_cache(char *s) BOOL mangle_check_cache(char *s, size_t maxlen)
{ {
return mangle_fns->check_cache(s); return mangle_fns->check_cache(s, maxlen);
} }
/* /*

View File

@ -557,7 +557,7 @@ static void cache_mangled_name( char *mangled_name, char *raw_name )
* Check for a name on the mangled name stack * Check for a name on the mangled name stack
* *
* Input: s - Input *and* output string buffer. * Input: s - Input *and* output string buffer.
* * maxlen - space in i/o string buffer.
* Output: True if the name was found in the cache, else False. * Output: True if the name was found in the cache, else False.
* *
* Notes: If a reverse map is found, the function will overwrite the string * Notes: If a reverse map is found, the function will overwrite the string
@ -568,7 +568,7 @@ static void cache_mangled_name( char *mangled_name, char *raw_name )
* ************************************************************************** ** * ************************************************************************** **
*/ */
static BOOL check_cache( char *s ) static BOOL check_cache( char *s, size_t maxlen )
{ {
ubi_cacheEntryPtr FoundPtr; ubi_cacheEntryPtr FoundPtr;
char *ext_start = NULL; char *ext_start = NULL;
@ -602,7 +602,7 @@ static BOOL check_cache( char *s )
if( !FoundPtr ) { if( !FoundPtr ) {
if(saved_ext) { if(saved_ext) {
/* Replace the saved_ext as it was truncated. */ /* Replace the saved_ext as it was truncated. */
(void)pstrcat( s, saved_ext ); (void)safe_strcat( s, saved_ext, maxlen );
SAFE_FREE(saved_ext); SAFE_FREE(saved_ext);
} }
return( False ); return( False );
@ -612,10 +612,10 @@ static BOOL check_cache( char *s )
found_name = (char *)(FoundPtr + 1); found_name = (char *)(FoundPtr + 1);
found_name += (strlen( found_name ) + 1); found_name += (strlen( found_name ) + 1);
(void)pstrcpy( s, found_name ); (void)safe_strcpy( s, found_name, maxlen );
if( saved_ext ) { if( saved_ext ) {
/* Replace the saved_ext as it was truncated. */ /* Replace the saved_ext as it was truncated. */
(void)pstrcat( s, saved_ext ); (void)safe_strcat( s, saved_ext, maxlen );
SAFE_FREE(saved_ext); SAFE_FREE(saved_ext);
} }

View File

@ -362,10 +362,8 @@ static void mangle_reset(void)
/* /*
try to find a 8.3 name in the cache, and if found then try to find a 8.3 name in the cache, and if found then
replace the string with the original long name. replace the string with the original long name.
The filename must be able to hold at least sizeof(fstring)
*/ */
static BOOL check_cache(char *name) static BOOL check_cache(char *name, size_t maxlen)
{ {
u32 hash, multiplier; u32 hash, multiplier;
unsigned int i; unsigned int i;
@ -403,10 +401,10 @@ static BOOL check_cache(char *name)
if (extension[0]) { if (extension[0]) {
M_DEBUG(10,("check_cache: %s -> %s.%s\n", name, prefix, extension)); M_DEBUG(10,("check_cache: %s -> %s.%s\n", name, prefix, extension));
slprintf(name, sizeof(fstring), "%s.%s", prefix, extension); slprintf(name, maxlen, "%s.%s", prefix, extension);
} else { } else {
M_DEBUG(10,("check_cache: %s -> %s\n", name, prefix)); M_DEBUG(10,("check_cache: %s -> %s\n", name, prefix));
fstrcpy(name, prefix); safe_strcpy(name, prefix, maxlen);
} }
return True; return True;

View File

@ -1583,7 +1583,7 @@ NTSTATUS unlink_internals(connection_struct *conn, int dirtype, char *name)
*/ */
if (!rc && mangle_is_mangled(mask)) if (!rc && mangle_is_mangled(mask))
mangle_check_cache( mask ); mangle_check_cache( mask, sizeof(pstring)-1 );
if (!has_wild) { if (!has_wild) {
pstrcat(directory,"/"); pstrcat(directory,"/");
@ -3738,7 +3738,7 @@ NTSTATUS rename_internals(connection_struct *conn, char *name, char *newname, ui
*/ */
if (!rc && mangle_is_mangled(mask)) if (!rc && mangle_is_mangled(mask))
mangle_check_cache( mask ); mangle_check_cache( mask, sizeof(pstring)-1 );
has_wild = ms_has_wild(mask); has_wild = ms_has_wild(mask);
@ -4216,7 +4216,7 @@ int reply_copy(connection_struct *conn, char *inbuf,char *outbuf, int dum_size,
*/ */
if (!rc && mangle_is_mangled(mask)) if (!rc && mangle_is_mangled(mask))
mangle_check_cache( mask ); mangle_check_cache( mask, sizeof(pstring)-1 );
has_wild = ms_has_wild(mask); has_wild = ms_has_wild(mask);