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:
parent
d810ffe58e
commit
0c6d7f28d6
@ -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_ */
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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))) {
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
@ -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);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user