r7544: Fix for bug #2196 from Denis Sbragion <d.sbragion@infotecna.it>.
authorJeremy Allison <jra@samba.org>
Mon, 13 Jun 2005 18:45:17 +0000 (18:45 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 15:57:13 +0000 (10:57 -0500)
Allow absolute path (system wide) recycle bin.
Jeremy.
(This used to be commit 451fbbf1d603cb99b0c9f0d39de9ad71a6a12833)

source3/modules/vfs_recycle.c

index 6a9914131d74f704fd6391a2f068d72031e6edc4..770dc2f40abda0989a77bcdca34114e250efdd79 100644 (file)
@@ -222,7 +222,7 @@ static SMB_OFF_T recycle_get_file_size(vfs_handle_struct *handle, const char *fn
  **/
 static BOOL recycle_create_dir(vfs_handle_struct *handle, const char *dname)
 {
-       int len;
+       size_t len;
        mode_t mode;
        char *new_dir = NULL;
        char *tmp_str = NULL;
@@ -240,6 +240,10 @@ static BOOL recycle_create_dir(vfs_handle_struct *handle, const char *dname)
        new_dir = (char *)SMB_MALLOC(len + 1);
        ALLOC_CHECK(new_dir, done);
        *new_dir = '\0';
+       if (dname[0] == '/') {
+               /* Absolute path. */
+               safe_strcat(new_dir,"/",len);
+       }
 
        /* Create directory tree if neccessary */
        for(token = strtok(tok_str, "/"); token; token = strtok(NULL, "/")) {
@@ -353,7 +357,8 @@ static int recycle_unlink(vfs_handle_struct *handle, connection_struct *conn, co
        repository = alloc_sub_conn(conn, recycle_repository(handle));
        ALLOC_CHECK(repository, done);
        /* shouldn't we allow absolute path names here? --metze */
-       trim_char(repository, '/', '/');
+       /* Yes :-). JRA. */
+       trim_char(repository, '\0', '/');
        
        if(!repository || *(repository) == '\0') {
                DEBUG(3, ("recycle: repository path not set, purging %s...\n", file_name));
@@ -379,7 +384,7 @@ static int recycle_unlink(vfs_handle_struct *handle, connection_struct *conn, co
        }
         */
 
-       /* FIXME: this is wrong, we should check the hole size of the recycle bin is
+       /* FIXME: this is wrong, we should check the whole size of the recycle bin is
         * not greater then maxsize, not the size of the single file, also it is better
         * to remove older files
         */