diff options
author | Jeremy Allison <jra@samba.org> | 2000-01-14 01:41:04 +0000 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2000-01-14 01:41:04 +0000 |
commit | 3a6c2069d77176bfa2b379ef711034396c477791 (patch) | |
tree | 87597146847db54925106d9e40b90b31ad86c852 /source3/smbd/reply.c | |
parent | 2afd5d5eb5c176f09a9f4f00ea3b517e89ef0ddf (diff) | |
download | samba-3a6c2069d77176bfa2b379ef711034396c477791.tar.gz samba-3a6c2069d77176bfa2b379ef711034396c477791.tar.bz2 samba-3a6c2069d77176bfa2b379ef711034396c477791.zip |
Added "inherit permissions" patch.
Fixed locking bug found by Andrew.
Jeremy.
(This used to be commit 38dffd360dc2e44bfc9e751f017e24f81ff0f2fa)
Diffstat (limited to 'source3/smbd/reply.c')
-rw-r--r-- | source3/smbd/reply.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c index 1e90ff4c4f..d15a26b20c 100644 --- a/source3/smbd/reply.c +++ b/source3/smbd/reply.c @@ -1547,7 +1547,7 @@ int reply_open(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, return(UNIXERROR(ERRDOS,ERRnoaccess)); } - unixmode = unix_mode(conn,aARCH); + unixmode = unix_mode(conn,aARCH,fname); open_file_shared(fsp,conn,fname,share_mode,(FILE_FAIL_IF_NOT_EXIST|FILE_EXISTS_OPEN), unixmode, oplock_request,&rmode,NULL); @@ -1649,7 +1649,7 @@ int reply_open_and_X(connection_struct *conn, char *inbuf,char *outbuf,int lengt return(UNIXERROR(ERRDOS,ERRnoaccess)); } - unixmode = unix_mode(conn,smb_attr | aARCH); + unixmode = unix_mode(conn,smb_attr | aARCH, fname); open_file_shared(fsp,conn,fname,smb_mode,smb_ofun,unixmode, oplock_request, &rmode,&smb_action); @@ -1773,7 +1773,7 @@ int reply_mknew(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, DEBUG(0,("Attempt to create file (%s) with volid set - please report this\n",fname)); } - unixmode = unix_mode(conn,createmode); + unixmode = unix_mode(conn,createmode,fname); fsp = file_new(); if (!fsp) @@ -1853,7 +1853,7 @@ int reply_ctemp(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, pstrcat(fname,"/TMXXXXXX"); unix_convert(fname,conn,0,&bad_path,NULL); - unixmode = unix_mode(conn,createmode); + unixmode = unix_mode(conn,createmode,fname); fsp = file_new(); if (fsp) @@ -3076,7 +3076,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_FAIL), unix_mode(conn,0), 0, NULL, NULL); + (FILE_CREATE_IF_NOT_EXIST|FILE_EXISTS_FAIL), unix_mode(conn,0,fname2), 0, NULL, NULL); if (!fsp->open) { file_free(fsp); @@ -3235,7 +3235,7 @@ int reply_mkdir(connection_struct *conn, char *inbuf,char *outbuf, int dum_size, unix_convert(directory,conn,0,&bad_path,NULL); if (check_name(directory, conn)) - ret = dos_mkdir(directory,unix_mode(conn,aDIR)); + ret = dos_mkdir(directory,unix_mode(conn,aDIR,directory)); if (ret < 0) { @@ -4291,7 +4291,12 @@ no oplock granted on this file (%s).\n", fsp->fnum, fsp->fsp_name)); /* If any of the above locks failed, then we must unlock all of the previous locks (X/Open spec). */ if(i != num_locks && num_locks != 0) { - for(; i >= 0; i--) { + /* + * Ensure we don't do a remove on the lock that just failed, + * as under POSIX rules, if we have a lock already there, we + * will delete it (and we shouldn't) ..... + */ + for(i--; i >= 0; i--) { count = get_lock_count( data, i, large_file_format, &err1); offset = get_lock_offset( data, i, large_file_format, &err2); |