Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


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

1 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 +}