svn commit: samba r3174 - in branches/SAMBA_4_0/source/ntvfs: common posix

tridge at samba.org tridge at samba.org
Mon Oct 25 01:29:32 GMT 2004


Author: tridge
Date: 2004-10-25 01:29:31 +0000 (Mon, 25 Oct 2004)
New Revision: 3174

WebSVN: http://websvn.samba.org/websvn/changeset.php?rep=samba&path=/branches/SAMBA_4_0/source/ntvfs&rev=3174&nolog=1

Log:
added pvfs_is_open() to allow us to check for open files on unlink. We
now pass BASE-UNLINK.



Modified:
   branches/SAMBA_4_0/source/ntvfs/common/opendb.c
   branches/SAMBA_4_0/source/ntvfs/posix/pvfs_open.c
   branches/SAMBA_4_0/source/ntvfs/posix/pvfs_unlink.c


Changeset:
Modified: branches/SAMBA_4_0/source/ntvfs/common/opendb.c
===================================================================
--- branches/SAMBA_4_0/source/ntvfs/common/opendb.c	2004-10-25 01:16:35 UTC (rev 3173)
+++ branches/SAMBA_4_0/source/ntvfs/common/opendb.c	2004-10-25 01:29:31 UTC (rev 3174)
@@ -335,3 +335,23 @@
 
 	return status;
 }
+
+
+/*
+  determine if a file is open
+*/
+BOOL odb_is_open(struct odb_context *odb, DATA_BLOB *key)
+{
+	TDB_DATA dbuf;
+	TDB_DATA kbuf;
+
+	kbuf.dptr = key->data;
+	kbuf.dsize = key->length;
+
+	dbuf = tdb_fetch(odb->w->tdb, kbuf);
+	if (dbuf.dptr == NULL) {
+		return False;
+	}
+	free(dbuf.dptr);
+	return True;
+}

Modified: branches/SAMBA_4_0/source/ntvfs/posix/pvfs_open.c
===================================================================
--- branches/SAMBA_4_0/source/ntvfs/posix/pvfs_open.c	2004-10-25 01:16:35 UTC (rev 3173)
+++ branches/SAMBA_4_0/source/ntvfs/posix/pvfs_open.c	2004-10-25 01:29:31 UTC (rev 3174)
@@ -703,3 +703,20 @@
 
 	return status;
 }
+
+
+/*
+  determine if a file is open - used to prevent some operations on open files
+*/
+BOOL pvfs_is_open(struct pvfs_state *pvfs, struct pvfs_filename *name)
+{
+	NTSTATUS status;
+	DATA_BLOB key;
+
+	status = pvfs_locking_key(name, name, &key);
+	if (!NT_STATUS_IS_OK(status)) {
+		return False;
+	}
+
+	return odb_is_open(pvfs->odb_context, &key);
+}

Modified: branches/SAMBA_4_0/source/ntvfs/posix/pvfs_unlink.c
===================================================================
--- branches/SAMBA_4_0/source/ntvfs/posix/pvfs_unlink.c	2004-10-25 01:16:35 UTC (rev 3173)
+++ branches/SAMBA_4_0/source/ntvfs/posix/pvfs_unlink.c	2004-10-25 01:29:31 UTC (rev 3174)
@@ -80,6 +80,10 @@
 		return NT_STATUS_OBJECT_NAME_NOT_FOUND;
 	}
 
+	if (pvfs_is_open(pvfs, name)) {
+		return NT_STATUS_SHARING_VIOLATION;
+	}
+
 	dir = talloc_p(req, struct pvfs_dir);
 	if (dir == NULL) {
 		return NT_STATUS_NO_MEMORY;



More information about the samba-cvs mailing list