Magellan Linux

Annotation of /trunk/samba/patches/samba-3.0.24-directory-delete.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 153 - (hide annotations) (download)
Tue May 8 20:52:56 2007 UTC (17 years, 1 month ago) by niro
File size: 2218 byte(s)
-import

1 niro 153 Index: samba-3.0.24/source/lib/dummysmbd.c
2     ===================================================================
3     --- samba-3.0.24.orig/source/lib/dummysmbd.c 2006-04-19 21:29:23.000000000 -0500
4     +++ samba-3.0.24/source/lib/dummysmbd.c 2007-02-08 20:15:04.000000000 -0600
5     @@ -38,3 +38,9 @@
6     {
7     return False;
8     }
9     +
10     +NTSTATUS can_delete_directory(struct connection_struct *conn,
11     + const char *dirname)
12     +{
13     + return NT_STATUS_OK;
14     +}
15     Index: samba-3.0.24/source/locking/locking.c
16     ===================================================================
17     --- samba-3.0.24.orig/source/locking/locking.c 2007-02-04 12:59:23.000000000 -0600
18     +++ samba-3.0.24/source/locking/locking.c 2007-02-08 20:15:04.000000000 -0600
19     @@ -1166,6 +1166,11 @@
20     return NT_STATUS_ACCESS_DENIED;
21     }
22    
23     + /* Don't allow delete on close for non-empty directories. */
24     + if (fsp->is_directory) {
25     + return can_delete_directory(fsp->conn, fsp->fsp_name);
26     + }
27     +
28     return NT_STATUS_OK;
29     }
30    
31     Index: samba-3.0.24/source/smbd/dir.c
32     ===================================================================
33     --- samba-3.0.24.orig/source/smbd/dir.c 2007-02-04 12:59:13.000000000 -0600
34     +++ samba-3.0.24/source/smbd/dir.c 2007-02-08 20:15:04.000000000 -0600
35     @@ -1255,3 +1255,42 @@
36     }
37     return False;
38     }
39     +
40     +/*****************************************************************
41     + Is this directory empty ?
42     +*****************************************************************/
43     +
44     +NTSTATUS can_delete_directory(struct connection_struct *conn,
45     + const char *dirname)
46     +{
47     + NTSTATUS status = NT_STATUS_OK;
48     + long dirpos = 0;
49     + const char *dname;
50     + struct smb_Dir *dir_hnd = OpenDir(conn, dirname, NULL, 0);
51     +
52     + if (!dir_hnd) {
53     + return map_nt_error_from_unix(errno);
54     + }
55     +
56     + while ((dname = ReadDirName(dir_hnd,&dirpos))) {
57     + SMB_STRUCT_STAT st;
58     +
59     + /* Quick check for "." and ".." */
60     + if (dname[0] == '.') {
61     + if (!dname[1] || (dname[1] == '.' && !dname[2])) {
62     + continue;
63     + }
64     + }
65     +
66     + if (!is_visible_file(conn, dirname, dname, &st, True)) {
67     + continue;
68     + }
69     +
70     + DEBUG(10,("can_delete_directory: got name %s - can't delete\n", dname ));
71     + status = NT_STATUS_DIRECTORY_NOT_EMPTY;
72     + break;
73     + }
74     + CloseDir(dir_hnd);
75     +
76     + return status;
77     +}