summaryrefslogtreecommitdiff
path: root/source3/smbd
diff options
context:
space:
mode:
authorGerald Carter <jerry@samba.org>2004-07-22 13:39:43 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 10:52:15 -0500
commit0c6d7f28d6c1066cc6b3055ebf6a8fcf685ca1f6 (patch)
treeaab81a105d51d7985421a12bb0496f35a4dc3a26 /source3/smbd
parentd810ffe58e9c6b3b71336f59b899012af9137fe7 (diff)
downloadsamba-0c6d7f28d6c1066cc6b3055ebf6a8fcf685ca1f6.tar.gz
samba-0c6d7f28d6c1066cc6b3055ebf6a8fcf685ca1f6.tar.bz2
samba-0c6d7f28d6c1066cc6b3055ebf6a8fcf685ca1f6.zip
r1570: merging changes from 3.0.5
(This used to be commit 430cf63b9148441bce42bfb15a8045de5da108f4)
Diffstat (limited to 'source3/smbd')
-rw-r--r--source3/smbd/filename.c4
-rw-r--r--source3/smbd/mangle.c4
-rw-r--r--source3/smbd/mangle_hash.c10
-rw-r--r--source3/smbd/mangle_hash2.c8
-rw-r--r--source3/smbd/reply.c6
5 files changed, 15 insertions, 17 deletions
diff --git a/source3/smbd/filename.c b/source3/smbd/filename.c
index ab75d9c06a..cc1c0a40b6 100644
--- a/source3/smbd/filename.c
+++ b/source3/smbd/filename.c
@@ -326,7 +326,7 @@ BOOL unix_convert(pstring name,connection_struct *conn,char *saved_last_componen
*/
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));
@@ -476,7 +476,7 @@ static BOOL scan_directory(const char *path, char *name, size_t maxlength,
* (JRA).
*/
if (mangled)
- mangled = !mangle_check_cache( name );
+ mangled = !mangle_check_cache( name, maxlength );
/* open the directory */
if (!(cur_dir = OpenDir(conn, path, True))) {
diff --git a/source3/smbd/mangle.c b/source3/smbd/mangle.c
index b77fe601b6..43becff69d 100644
--- a/source3/smbd/mangle.c
+++ b/source3/smbd/mangle.c
@@ -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
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);
}
/*
diff --git a/source3/smbd/mangle_hash.c b/source3/smbd/mangle_hash.c
index d7239b82a7..13ec99a917 100644
--- a/source3/smbd/mangle_hash.c
+++ b/source3/smbd/mangle_hash.c
@@ -557,7 +557,7 @@ static void cache_mangled_name( char *mangled_name, char *raw_name )
* Check for a name on the mangled name stack
*
* 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.
*
* 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;
char *ext_start = NULL;
@@ -602,7 +602,7 @@ static BOOL check_cache( char *s )
if( !FoundPtr ) {
if(saved_ext) {
/* Replace the saved_ext as it was truncated. */
- (void)pstrcat( s, saved_ext );
+ (void)safe_strcat( s, saved_ext, maxlen );
SAFE_FREE(saved_ext);
}
return( False );
@@ -612,10 +612,10 @@ static BOOL check_cache( char *s )
found_name = (char *)(FoundPtr + 1);
found_name += (strlen( found_name ) + 1);
- (void)pstrcpy( s, found_name );
+ (void)safe_strcpy( s, found_name, maxlen );
if( saved_ext ) {
/* Replace the saved_ext as it was truncated. */
- (void)pstrcat( s, saved_ext );
+ (void)safe_strcat( s, saved_ext, maxlen );
SAFE_FREE(saved_ext);
}
diff --git a/source3/smbd/mangle_hash2.c b/source3/smbd/mangle_hash2.c
index dcfd7663ba..f68873687b 100644
--- a/source3/smbd/mangle_hash2.c
+++ b/source3/smbd/mangle_hash2.c
@@ -362,10 +362,8 @@ static void mangle_reset(void)
/*
try to find a 8.3 name in the cache, and if found then
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;
unsigned int i;
@@ -403,10 +401,10 @@ static BOOL check_cache(char *name)
if (extension[0]) {
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 {
M_DEBUG(10,("check_cache: %s -> %s\n", name, prefix));
- fstrcpy(name, prefix);
+ safe_strcpy(name, prefix, maxlen);
}
return True;
diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c
index 71efb793af..f3ab709df4 100644
--- a/source3/smbd/reply.c
+++ b/source3/smbd/reply.c
@@ -1583,7 +1583,7 @@ NTSTATUS unlink_internals(connection_struct *conn, int dirtype, char *name)
*/
if (!rc && mangle_is_mangled(mask))
- mangle_check_cache( mask );
+ mangle_check_cache( mask, sizeof(pstring)-1 );
if (!has_wild) {
pstrcat(directory,"/");
@@ -3738,7 +3738,7 @@ NTSTATUS rename_internals(connection_struct *conn, char *name, char *newname, ui
*/
if (!rc && mangle_is_mangled(mask))
- mangle_check_cache( mask );
+ mangle_check_cache( mask, sizeof(pstring)-1 );
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))
- mangle_check_cache( mask );
+ mangle_check_cache( mask, sizeof(pstring)-1 );
has_wild = ms_has_wild(mask);