From 1d16f750515bcf49e0dc87394479dc56e7192538 Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 26 May 1998 19:37:31 +0000 Subject: smb.h: More NT SMB stuff (just defines). smbpass.c: Do *NOT* make this function static. It breaks the compile on gcc util.c: Getting closer to MS wildcard semantics. A trailing '*' matches any trailing dot-separated components. trans2.c: Removed hacks that change multiple '?' -> '*' as this breaks things now. trans2.h: Removed NT_FILE_ATTRIBUTE_NORMAL - now FILE_ATTRIBUTE_NORMAL is defined in smb.h. Jeremy. (This used to be commit 42a65511068cd9006350c80bbed2f346f3f01cb0) --- source3/include/smb.h | 9 +++++++++ source3/include/trans2.h | 5 ----- source3/lib/util.c | 8 +++++++- source3/passdb/smbpass.c | 3 ++- source3/smbd/trans2.c | 12 ++++++++++-- 5 files changed, 28 insertions(+), 9 deletions(-) (limited to 'source3') diff --git a/source3/include/smb.h b/source3/include/smb.h index 31935b636d..0382cf2c71 100644 --- a/source3/include/smb.h +++ b/source3/include/smb.h @@ -1037,6 +1037,15 @@ struct parm_struct /* DesiredAccess */ #if 0 /* TODO.... JRA */ +#define SPECIFIC_RIGHTS_MASK 0x00FFFFL +#define STANDARD_RIGHTS_MASK 0xFF0000L +#define DELETE_ACCESS (1L<<16) +#define READ_CONTROL_ACCESS (1L<<17) +#define WRITE_DAC_ACCESS (1L<<18) +#define WRITE_OWNER_ACCESS (1L<<19) +#define SYNCHRONIZE_ACCESS (1L<<20) +#define SYSTEM_SECURITY_ACCESS (1L<<24) + #define GENERIC_READ xxx? #define GENERIC_WRITE xxx? #endif diff --git a/source3/include/trans2.h b/source3/include/trans2.h index 62b6a1a9bf..894823602e 100644 --- a/source3/include/trans2.h +++ b/source3/include/trans2.h @@ -233,11 +233,6 @@ Byte offset Type name description #define DIRLEN_GUESS (45+MAX(l1_achName,l2_achName)) -/* NT uses a FILE_ATTRIBUTE_NORMAL when no other attributes - are set. */ - -#define NT_FILE_ATTRIBUTE_NORMAL 0x80 - #endif diff --git a/source3/lib/util.c b/source3/lib/util.c index ebf66c56f4..98cd150d7f 100644 --- a/source3/lib/util.c +++ b/source3/lib/util.c @@ -3103,6 +3103,7 @@ BOOL mask_match(char *str, char *regexp, int case_sig,BOOL trans2) * characters. */ char *fp, *rp, *cp2, *cp1; + BOOL last_wcard_was_star = False; matched = False; for( cp1 = ebase, cp2 = sbase; cp1;) { fp = strchr(cp2, '.'); @@ -3111,12 +3112,17 @@ BOOL mask_match(char *str, char *regexp, int case_sig,BOOL trans2) rp = strchr(cp1, '.'); if(rp) *rp = '\0'; + + if(cp1[strlen(cp1)-1] == '*') + last_wcard_was_star = True; + else + last_wcard_was_star = False; if(!do_match(cp2, cp1, case_sig)) break; cp2 = fp ? fp + 1 : ""; cp1 = rp ? rp + 1 : NULL; } - if(cp1 == NULL) + if(cp1 == NULL && ((*cp2 == '\0') || last_wcard_was_star)) matched = True; } else { matched = do_match(sbase,ebase,case_sig) && do_match(sext,eext,case_sig); diff --git a/source3/passdb/smbpass.c b/source3/passdb/smbpass.c index a9efcf2a52..abb037b95d 100644 --- a/source3/passdb/smbpass.c +++ b/source3/passdb/smbpass.c @@ -952,5 +952,6 @@ struct passdb_ops *file_initialize_password_db(void) } #else - static void dummy_function(void) { } /* stop some compilers complaining */ + /* Do *NOT* make this function static. It breaks the compile on gcc. JRA */ + void dummy_function(void) { } /* stop some compilers complaining */ #endif /* USE_SMBPASS_DB */ diff --git a/source3/smbd/trans2.c b/source3/smbd/trans2.c index 4c06377bda..4fefb4b39c 100644 --- a/source3/smbd/trans2.c +++ b/source3/smbd/trans2.c @@ -401,7 +401,7 @@ static int get_lanman2_dir_entry(int cnum,char *path_mask,int dirtype,int info_l p = pdata; nameptr = p; - nt_extmode = mode ? mode : NT_FILE_ATTRIBUTE_NORMAL; + nt_extmode = mode ? mode : FILE_ATTRIBUTE_NORMAL; switch (info_level) { @@ -693,13 +693,21 @@ static int call_trans2findfirst(char *inbuf, char *outbuf, int bufsize, int cnum p++; } } - + +#if 0 /* JRA */ + /* + * Now we have a working mask_match in util.c, I believe + * we no longer need these hacks (in fact they break + * things). JRA. + */ + /* a special case for 16 bit apps */ if (strequal(mask,"????????.???")) pstrcpy(mask,"*"); /* handle broken clients that send us old 8.3 format */ string_sub(mask,"????????","*"); string_sub(mask,".???",".*"); +#endif /* JRA */ /* Save the wildcard match and attribs we are using on this directory - needed as lanman2 assumes these are being saved between calls */ -- cgit