diff options
author | Volker Lendecke <vlendec@samba.org> | 2007-06-14 12:03:46 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 12:23:21 -0500 |
commit | 184eb775ffdd6f8afa8822a889b754e5e7050e45 (patch) | |
tree | 726566024143018ea0541f91854567f3e9882d32 /source3/smbd | |
parent | 6090601c8b6abde1642906351d1dd9bb41e576b6 (diff) | |
download | samba-184eb775ffdd6f8afa8822a889b754e5e7050e45.tar.gz samba-184eb775ffdd6f8afa8822a889b754e5e7050e45.tar.bz2 samba-184eb775ffdd6f8afa8822a889b754e5e7050e45.zip |
r23486: Ok, this time with a hopefully successful make test in the right place:
Remove two local variables
(This used to be commit 575e594e936c3cb197945063309f0b424dcdefc8)
Diffstat (limited to 'source3/smbd')
-rw-r--r-- | source3/smbd/reply.c | 51 |
1 files changed, 33 insertions, 18 deletions
diff --git a/source3/smbd/reply.c b/source3/smbd/reply.c index 272c3966ba..45c4b1d1df 100644 --- a/source3/smbd/reply.c +++ b/source3/smbd/reply.c @@ -4168,13 +4168,15 @@ static BOOL resolve_wildcards(const char *name1, char *name2) asynchronously. ****************************************************************************/ -static void rename_open_files(connection_struct *conn, struct share_mode_lock *lck, - struct file_id id, const char *newname) +static void rename_open_files(connection_struct *conn, + struct share_mode_lock *lck, + const char *newname) { files_struct *fsp; BOOL did_rename = False; - for(fsp = file_find_di_first(id); fsp; fsp = file_find_di_next(fsp)) { + for(fsp = file_find_di_first(lck->id); fsp; + fsp = file_find_di_next(fsp)) { /* fsp_name is a relative path under the fsp. To change this for other sharepaths we need to manipulate relative paths. */ /* TODO - create the absolute path and manipulate the newname @@ -4191,7 +4193,7 @@ static void rename_open_files(connection_struct *conn, struct share_mode_lock *l if (!did_rename) { DEBUG(10,("rename_open_files: no open files on file_id %s for %s\n", - file_id_static_string(&id), newname )); + file_id_static_string(&lck->id), newname )); } /* Send messages to all smbd's (not ourself) that the name has changed. */ @@ -4237,7 +4239,6 @@ NTSTATUS rename_internals_fsp(connection_struct *conn, files_struct *fsp, pstrin SMB_STRUCT_STAT sbuf; pstring newname_last_component; NTSTATUS status = NT_STATUS_OK; - BOOL dest_exists; struct share_mode_lock *lck = NULL; ZERO_STRUCT(sbuf); @@ -4306,9 +4307,7 @@ NTSTATUS rename_internals_fsp(connection_struct *conn, files_struct *fsp, pstrin return NT_STATUS_OK; } - dest_exists = vfs_object_exist(conn,newname,NULL); - - if(!replace_if_exists && dest_exists) { + if(!replace_if_exists && vfs_object_exist(conn, newname, NULL)) { DEBUG(3,("rename_internals_fsp: dest exists doing rename %s -> %s\n", fsp->fsp_name,newname)); return NT_STATUS_OBJECT_NAME_COLLISION; @@ -4341,13 +4340,20 @@ NTSTATUS rename_internals_fsp(connection_struct *conn, files_struct *fsp, pstrin lck = get_share_mode_lock(NULL, fsp->file_id, NULL, NULL); + /* + * We have the file open ourselves, so not being able to get the + * corresponding share mode lock is a fatal error. + */ + + SMB_ASSERT(lck != NULL); + if(SMB_VFS_RENAME(conn,fsp->fsp_name, newname) == 0) { uint32 create_options = fsp->fh->private_options; DEBUG(3,("rename_internals_fsp: succeeded doing rename on %s -> %s\n", fsp->fsp_name,newname)); - rename_open_files(conn, lck, fsp->file_id, newname); + rename_open_files(conn, lck, newname); /* * A rename acts as a new file create w.r.t. allowing an initial delete @@ -4455,7 +4461,6 @@ NTSTATUS rename_internals(connection_struct *conn, const char *dname; long offset = 0; pstring destname; - struct file_id id; *directory = *mask = 0; @@ -4605,8 +4610,6 @@ NTSTATUS rename_internals(connection_struct *conn, * don't do the rename, just return success. */ - id = file_id_sbuf(&sbuf1); - if (strcsequal(directory, newname)) { DEBUG(3, ("rename_internals: identical names in " "rename %s - returning success\n", @@ -4624,12 +4627,19 @@ NTSTATUS rename_internals(connection_struct *conn, return NT_STATUS_SHARING_VIOLATION; } - lck = get_share_mode_lock(NULL, id, NULL, NULL); + lck = get_share_mode_lock(NULL, file_id_sbuf(&sbuf1), + NULL, NULL); if(SMB_VFS_RENAME(conn,directory, newname) == 0) { DEBUG(3,("rename_internals: succeeded doing rename " "on %s -> %s\n", directory, newname)); - rename_open_files(conn, lck, id, newname); + if (lck != NULL) { + /* + * Only in this case there are open files at + * all. + */ + rename_open_files(conn, lck, newname); + } TALLOC_FREE(lck); notify_rename(conn, S_ISDIR(sbuf1.st_mode), directory, newname); @@ -4740,8 +4750,6 @@ NTSTATUS rename_internals(connection_struct *conn, return status; } - id = file_id_sbuf(&sbuf1); - if (strcsequal(fname,destname)) { DEBUG(3,("rename_internals: identical names " "in wildcard rename %s - success\n", @@ -4761,10 +4769,17 @@ NTSTATUS rename_internals(connection_struct *conn, return NT_STATUS_SHARING_VIOLATION; } - lck = get_share_mode_lock(NULL, id, NULL, NULL); + lck = get_share_mode_lock(NULL, file_id_sbuf(&sbuf1), NULL, + NULL); if (!SMB_VFS_RENAME(conn,fname,destname)) { - rename_open_files(conn, lck, id, newname); + if (lck != NULL) { + /* + * Only in this case there are open files at + * all. + */ + rename_open_files(conn, lck, newname); + } count++; status = NT_STATUS_OK; } |