summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>1998-11-16 21:38:13 +0000
committerJeremy Allison <jra@samba.org>1998-11-16 21:38:13 +0000
commit31739a0e1e32abfa7da166afbc5075aeab4124e6 (patch)
treef5faf5f229a9cbcaf8079beee4a6649bf4aa96eb
parentf4447df41b59f6939528f517a07078c596d2b8b5 (diff)
downloadsamba-31739a0e1e32abfa7da166afbc5075aeab4124e6.tar.gz
samba-31739a0e1e32abfa7da166afbc5075aeab4124e6.tar.bz2
samba-31739a0e1e32abfa7da166afbc5075aeab4124e6.zip
O_EXCL fixes for printing files & oplocks.
Jeremy. (This used to be commit 4ca71c90985b1c88d92bdd0f9079a4afc263dc46)
-rw-r--r--source3/smbd/open.c5
-rw-r--r--source3/smbd/oplock.c2
-rw-r--r--source3/smbd/reply.c2
3 files changed, 6 insertions, 3 deletions
diff --git a/source3/smbd/open.c b/source3/smbd/open.c
index f9ddc969a8..c81334c8ae 100644
--- a/source3/smbd/open.c
+++ b/source3/smbd/open.c
@@ -312,7 +312,7 @@ static void open_file(files_struct *fsp,connection_struct *conn,
/* this handles a bug in Win95 - it doesn't say to create the file when it
should */
if (conn->printer) {
- flags |= O_CREAT;
+ flags |= (O_CREAT|O_EXCL);
}
/*
@@ -770,6 +770,9 @@ void open_file_shared(files_struct *fsp,connection_struct *conn,char *fname,int
if (GET_FILE_OPEN_DISPOSITION(ofun) == FILE_EXISTS_TRUNCATE)
flags2 |= O_TRUNC;
+ if (GET_FILE_OPEN_DISPOSITION(ofun) == FILE_EXISTS_FAIL)
+ flags2 |= O_EXCL;
+
/* note that we ignore the append flag as
append does not mean the same thing under dos and unix */
diff --git a/source3/smbd/oplock.c b/source3/smbd/oplock.c
index 89a2adb900..e0e1658a78 100644
--- a/source3/smbd/oplock.c
+++ b/source3/smbd/oplock.c
@@ -1057,7 +1057,7 @@ void check_kernel_oplocks(void)
return;
}
- if((fd = open(tmpname, O_RDWR|O_CREAT|O_TRUNC, 0600)) < 0) {
+ if((fd = open(tmpname, O_RDWR|O_CREAT|O_TRUNC|O_EXCL, 0600)) < 0) {
DEBUG(0,("check_kernel_oplocks: Unable to open temp test file %s. Error was %s\n",
tmpname, strerror(errno) ));
unlink( tmpname );
diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c
index d466884ab6..ee0053aed0 100644
--- a/source3/smbd/reply.c
+++ b/source3/smbd/reply.c
@@ -2728,7 +2728,7 @@ int reply_printopen(connection_struct *conn,
/* Open for exclusive use, write only. */
open_file_shared(fsp,conn,fname2, SET_DENY_MODE(DENY_ALL)|SET_OPEN_MODE(DOS_OPEN_WRONLY),
- (FILE_CREATE_IF_NOT_EXIST|FILE_EXISTS_TRUNCATE), unix_mode(conn,0), 0, NULL, NULL);
+ (FILE_CREATE_IF_NOT_EXIST|FILE_EXISTS_FAIL), unix_mode(conn,0), 0, NULL, NULL);
if (!fsp->open) {
file_free(fsp);