Ignore:
Timestamp:
Apr 10, 2007, 5:27:38 AM (14 years ago)
Author:
Paul Smedley
Message:

Updated source to 3.0.25rc1

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/samba/source/modules/vfs_recycle.c

    r22 r26  
    312312
    313313/**
    314  * Check if needle is contained exactly in haystack
    315  * @param haystack list of parameters separated by delimimiter character
    316  * @param needle string to be matched exactly to haystack
    317  * @return True if found
     314 * Check if any of the components of "exclude_list" are contained in path.
     315 * Return True if found
    318316 **/
    319 static BOOL checkparam(const char **haystack_list, const char *needle)
    320 {
    321         int i;
    322 
    323         if (haystack_list == NULL || haystack_list[0] == NULL ||
    324                 *haystack_list[0] == '\0' || needle == NULL || *needle == '\0') {
     317
     318static BOOL matchdirparam(const char **dir_exclude_list, char *path)
     319{
     320        char *startp = NULL, *endp = NULL;
     321
     322        if (dir_exclude_list == NULL || dir_exclude_list[0] == NULL ||
     323                *dir_exclude_list[0] == '\0' || path == NULL || *path == '\0') {
    325324                return False;
    326325        }
    327326
    328         for(i=0; haystack_list[i] ; i++) {
    329                 if(strequal(haystack_list[i], needle)) {
    330                         return True;
     327        /*
     328         * Walk the components of path, looking for matches with the
     329         * exclude list on each component.
     330         */
     331
     332        for (startp = path; startp; startp = endp) {
     333                int i;
     334
     335                while (*startp == '/') {
     336                        startp++;
     337                }
     338                endp = strchr(startp, '/');
     339                if (endp) {
     340                        *endp = '\0';
     341                }
     342
     343                for(i=0; dir_exclude_list[i] ; i++) {
     344                        if(unix_wild_match(dir_exclude_list[i], startp)) {
     345                                /* Repair path. */
     346                                if (endp) {
     347                                        *endp = '/';
     348                                }
     349                                return True;
     350                        }
     351                }
     352
     353                /* Repair path. */
     354                if (endp) {
     355                        *endp = '/';
    331356                }
    332357        }
     
    486511        }
    487512
    488         /* FIXME: this check will fail if we have more than one level of directories,
    489          * we shoud check for every level 1, 1/2, 1/2/3, 1/2/3/4 ....
    490          *      ---simo
    491          */
    492         if (checkparam(recycle_exclude_dir(handle), path_name)) {
     513        if (matchdirparam(recycle_exclude_dir(handle), path_name)) {
    493514                DEBUG(3, ("recycle: directory %s is excluded \n", path_name));
    494515                rc = SMB_VFS_NEXT_UNLINK(handle, file_name);
Note: See TracChangeset for help on using the changeset viewer.