*/
if (!lp_delete_veto_files(SNUM(conn))) {
- errno = ENOTEMPTY;
+ status = NT_STATUS_DIRECTORY_NOT_EMPTY;
goto err;
}
* to avoid leaking information about what we
* can't delete.
*/
- errno = ENOTEMPTY;
+ status = NT_STATUS_DIRECTORY_NOT_EMPTY;
goto err;
}
if (fullname == NULL) {
TALLOC_FREE(talloced);
- errno = ENOMEM;
+ status = NT_STATUS_NO_MEMORY;
goto err;
}
if (smb_dname_full == NULL) {
TALLOC_FREE(talloced);
TALLOC_FREE(fullname);
- errno = ENOMEM;
+ status = NT_STATUS_NO_MEMORY;
goto err;
}
retval = SMB_VFS_LSTAT(conn, smb_dname_full);
if (retval != 0) {
- int saved_errno = errno;
+ status = map_nt_error_from_unix(errno);
TALLOC_FREE(talloced);
TALLOC_FREE(fullname);
TALLOC_FREE(smb_dname_full);
- errno = saved_errno;
goto err;
}
TALLOC_FREE(talloced);
TALLOC_FREE(fullname);
TALLOC_FREE(smb_dname_full);
- errno = ENOMEM;
+ status = NT_STATUS_NO_MEMORY;
goto err;
}
if (is_msdfs_link(fsp, smb_atname)) {
"- can't delete directory %s\n",
dname,
fsp_str_dbg(fsp));
- errno = ENOTEMPTY;
+ status = NT_STATUS_DIRECTORY_NOT_EMPTY;
goto err;
}
TALLOC_FREE(smb_atname);
TALLOC_FREE(talloced);
TALLOC_FREE(fullname);
TALLOC_FREE(smb_dname_full);
- errno = ENOTEMPTY;
+ status = NT_STATUS_DIRECTORY_NOT_EMPTY;
goto err;
}
TALLOC_FREE(talloced);
TALLOC_FREE(fullname);
TALLOC_FREE(smb_dname_full);
- errno = map_errno_from_nt_status(status);
goto err;
}
TALLOC_FREE(fullname);
TALLOC_FREE(smb_dname_full);
TALLOC_FREE(direntry_fname);
- errno = ENOTEMPTY;
+ status = NT_STATUS_DIRECTORY_NOT_EMPTY;
goto err;
}
dname);
if (fullname == NULL) {
- errno = ENOMEM;
+ status = NT_STATUS_NO_MEMORY;
goto err_break;
}
smb_dname->twrp,
smb_dname->flags);
if (smb_dname_full == NULL) {
- errno = ENOMEM;
+ status = NT_STATUS_NO_MEMORY;
goto err_break;
}
retval = SMB_VFS_LSTAT(conn, smb_dname_full);
if (retval != 0) {
+ status = map_nt_error_from_unix(errno);
goto err_break;
}
smb_dname->twrp,
smb_dname->flags);
if (direntry_fname == NULL) {
- errno = ENOMEM;
+ status = NT_STATUS_NO_MEMORY;
goto err_break;
}
} else {
smb_dname->flags,
&direntry_fname);
if (!NT_STATUS_IS_OK(status)) {
- errno = map_errno_from_nt_status(status);
goto err_break;
}
if (smb_dname_full->st.st_ex_mode & S_IFDIR) {
status = recursive_rmdir(ctx, conn, smb_dname_full);
- if (!NT_STATUS_IS_OK(status))
- {
- errno = map_errno_from_nt_status(status);
+ if (!NT_STATUS_IS_OK(status)) {
goto err_break;
}
unlink_flags = AT_REMOVEDIR;
direntry_fname,
unlink_flags);
if (retval != 0) {
+ status = map_nt_error_from_unix(errno);
goto err_break;
}
}
}
+ /* If we get here, we know NT_STATUS_IS_OK(status) */
+ SMB_ASSERT(NT_STATUS_IS_OK(status));
+
/* Retry the rmdir */
ret = SMB_VFS_UNLINKAT(conn,
parent_fname->fsp,
at_fname,
AT_REMOVEDIR);
-
+ if (ret != 0) {
+ status = map_nt_error_from_unix(errno);
+ }
err:
TALLOC_FREE(dir_hnd);
TALLOC_FREE(parent_fname);
- if (ret != 0) {
- DEBUG(3,("rmdir_internals: couldn't remove directory %s : "
+ if (!NT_STATUS_IS_OK(status)) {
+ DBG_NOTICE("couldn't remove directory %s : "
"%s\n", smb_fname_str_dbg(smb_dname),
- strerror(errno)));
- return map_nt_error_from_unix(errno);
+ nt_errstr(status));
+ return status;
}
notify_fname(conn, NOTIFY_ACTION_REMOVED,
FILE_NOTIFY_CHANGE_DIR_NAME,
smb_dname->base_name);
- return NT_STATUS_OK;
+ return status;
}
/****************************************************************************