diff options
Diffstat (limited to 'source3')
-rw-r--r-- | source3/include/proto.h | 1 | ||||
-rw-r--r-- | source3/locking/locking.c | 2 | ||||
-rw-r--r-- | source3/smbd/reply.c | 3 | ||||
-rw-r--r-- | source3/smbd/trans2.c | 48 |
4 files changed, 35 insertions, 19 deletions
diff --git a/source3/include/proto.h b/source3/include/proto.h index 92008b46e1..97ee483f55 100644 --- a/source3/include/proto.h +++ b/source3/include/proto.h @@ -1949,6 +1949,7 @@ time_t get_create_time(struct stat *st,BOOL fake_dirs); /*The following definitions come from trans2.c */ +void mask_convert( char *mask); int reply_findclose(char *inbuf,char *outbuf,int length,int bufsize); int reply_findnclose(char *inbuf,char *outbuf,int length,int bufsize); int reply_transs2(char *inbuf,char *outbuf,int length,int bufsize); diff --git a/source3/locking/locking.c b/source3/locking/locking.c index f443482544..e4ca6bbb04 100644 --- a/source3/locking/locking.c +++ b/source3/locking/locking.c @@ -51,11 +51,13 @@ static int map_lock_type( files_struct *fsp, int lock_type) * Win32 locking semantics allow this. * Do the best we can and attempt a read-only lock. */ + DEBUG(10,("map_lock_type: Downgrading write lock to read due to read-only file.\n")); return F_RDLCK; } else if( (lock_type == F_RDLCK) && (fsp->fd_ptr->real_open_flags == O_WRONLY)) { /* * Ditto for read locks on write only files. */ + DEBUG(10,("map_lock_type: Changing read lock to write due to write-only file.\n")); return F_WRLCK; } diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c index c9daf14b4b..f05ba2eee6 100644 --- a/source3/smbd/reply.c +++ b/source3/smbd/reply.c @@ -1081,6 +1081,9 @@ int reply_search(char *inbuf,char *outbuf, int dum_size, int dum_buffsize) } } + /* Convert the formatted mask. (This code lives in trans2.c) */ + mask_convert(mask); + { for (p=mask; *p; p++) { diff --git a/source3/smbd/trans2.c b/source3/smbd/trans2.c index a0aa65601f..2fcab32afb 100644 --- a/source3/smbd/trans2.c +++ b/source3/smbd/trans2.c @@ -574,6 +574,33 @@ static int get_lanman2_dir_entry(int cnum,char *path_mask,int dirtype,int info_l } /**************************************************************************** + Convert the directory masks formated for the wire. +****************************************************************************/ + +void mask_convert( char *mask) +{ + /* + * We know mask is a pstring. + */ + char *p = mask; + while (*p) { + if (*p == '<') { + pstring expnd; + if(p[1] != '"' && p[1] != '.') { + pstrcpy( expnd, p+1 ); + *p++ = '*'; + *p = '.'; + safe_strcpy( p+1, expnd, sizeof(pstring) - (p - mask) - 2); + } else + *p = '*'; + } + if (*p == '>') *p = '?'; + if (*p == '"') *p = '.'; + p++; + } +} + +/**************************************************************************** reply to a TRANS2_FINDFIRST ****************************************************************************/ static int call_trans2findfirst(char *inbuf, char *outbuf, int bufsize, int cnum, @@ -678,25 +705,8 @@ static int call_trans2findfirst(char *inbuf, char *outbuf, int bufsize, int cnum if (dptr_num < 0) return(ERROR(ERRDOS,ERRbadfile)); - /* convert the formatted masks */ - { - p = mask; - while (*p) { - if (*p == '<') { - pstring expnd; - if(p[1] != '"' && p[1] != '.') { - pstrcpy( expnd, p+1 ); - *p++ = '*'; - *p = '.'; - safe_strcpy( p+1, expnd, sizeof(mask) - (p - mask) - 2); - } else - *p = '*'; - } - if (*p == '>') *p = '?'; - if (*p == '"') *p = '.'; - p++; - } - } + /* Convert the formatted mask. */ + mask_convert(mask); #if 0 /* JRA */ /* |