}
if ((passlen > MAX_PASS_LEN) || (passlen >= req->buflen)) {
- reply_nterror(req, NT_STATUS_DOS(ERRDOS, ERRbuftoosmall));
+ reply_force_doserror(req, ERRDOS, ERRbuftoosmall);
END_PROFILE(SMBtconX);
return;
}
{
DEBUG(0, ("unknown command type (%s): type=%d (0x%X)\n",
smb_fn_name(type), type, type));
- reply_nterror(req, NT_STATUS_DOS(ERRSRV, ERRunknownsmb));
+ reply_force_doserror(req, ERRSRV, ERRunknownsmb);
return;
}
replysize = 32;
break;
default:
- reply_nterror(req, NT_STATUS_DOS(ERRSRV, ERRnosupport));
+ reply_force_doserror(req, ERRSRV, ERRnosupport);
END_PROFILE(SMBioctl);
return;
}
p += 2;
if (status_len == 0) {
- reply_nterror(req, NT_STATUS_DOS(ERRSRV, ERRsrverror));
+ reply_force_doserror(req, ERRSRV, ERRsrverror);
END_PROFILE(SMBfclose);
return;
}
OPENX_FILE_EXISTS_OPEN, &access_mask,
&share_mode, &create_disposition,
&create_options)) {
- reply_nterror(req, NT_STATUS_DOS(ERRDOS, ERRbadaccess));
+ reply_force_doserror(req, ERRDOS, ERRbadaccess);
goto out;
}
&access_mask, &share_mode,
&create_disposition,
&create_options)) {
- reply_nterror(req, NT_STATUS_DOS(ERRDOS, ERRbadaccess));
+ reply_force_doserror(req, ERRDOS, ERRbadaccess);
goto out;
}
}
if (!CAN_PRINT(conn)) {
- reply_nterror(req, NT_STATUS_DOS(ERRSRV, ERRerror));
+ reply_force_doserror(req, ERRSRV, ERRerror);
END_PROFILE(SMBsplclose);
return;
}
goto out;
}
- close_file(req, fsp, NORMAL_CLOSE);
- reply_outbuf(req, 0, 0);
+ status = close_file(req, fsp, NORMAL_CLOSE);
+ if (!NT_STATUS_IS_OK(status)) {
+ reply_nterror(req, status);
+ } else {
+ reply_outbuf(req, 0, 0);
+ }
dptr_closepath(sconn, smb_dname->base_name, req->smbpid);
defer_lock = true;
}
- /* This heuristic seems to match W2K3 very well. If a
- lock sent with timeout of zero would fail with NT_STATUS_FILE_LOCK_CONFLICT
- it pretends we asked for a timeout of between 150 - 300 milliseconds as
- far as I can tell. Replacement for do_lock_spin(). JRA. */
+ /* If a lock sent with timeout of zero would fail, and
+ * this lock has been requested multiple times,
+ * according to brl_lock_failed() we convert this
+ * request to a blocking lock with a timeout of between
+ * 150 - 300 milliseconds.
+ *
+ * If lp_lock_spin_time() has been set to 0, we skip
+ * this blocking retry and fail immediately.
+ *
+ * Replacement for do_lock_spin(). JRA. */
- if (br_lck && lp_blocking_locks(SNUM(conn)) && !blocking_lock &&
- NT_STATUS_EQUAL((status), NT_STATUS_FILE_LOCK_CONFLICT)) {
+ if (br_lck && lp_blocking_locks(SNUM(conn)) &&
+ lp_lock_spin_time() && !blocking_lock &&
+ NT_STATUS_EQUAL((status),
+ NT_STATUS_FILE_LOCK_CONFLICT))
+ {
defer_lock = true;
timeout = lp_lock_spin_time();
}
/* we don't support these - and CANCEL_LOCK makes w2k
and XP reboot so I don't really want to be
compatible! (tridge) */
- reply_nterror(req, NT_STATUS_DOS(ERRDOS, ERRnoatomiclocks));
+ reply_force_doserror(req, ERRDOS, ERRnoatomiclocks);
END_PROFILE(SMBlockingX);
return;
}
void reply_readbmpx(struct smb_request *req)
{
START_PROFILE(SMBreadBmpx);
- reply_nterror(req, NT_STATUS_DOS(ERRSRV, ERRuseSTD));
+ reply_force_doserror(req, ERRSRV, ERRuseSTD);
END_PROFILE(SMBreadBmpx);
return;
}
void reply_readbs(struct smb_request *req)
{
START_PROFILE(SMBreadBs);
- reply_nterror(req, NT_STATUS_DOS(ERRSRV, ERRuseSTD));
+ reply_force_doserror(req, ERRSRV, ERRuseSTD);
END_PROFILE(SMBreadBs);
return;
}
void reply_writebmpx(struct smb_request *req)
{
START_PROFILE(SMBwriteBmpx);
- reply_nterror(req, NT_STATUS_DOS(ERRSRV, ERRuseSTD));
+ reply_force_doserror(req, ERRSRV, ERRuseSTD);
END_PROFILE(SMBwriteBmpx);
return;
}
void reply_writebs(struct smb_request *req)
{
START_PROFILE(SMBwriteBs);
- reply_nterror(req, NT_STATUS_DOS(ERRSRV, ERRuseSTD));
+ reply_force_doserror(req, ERRSRV, ERRuseSTD);
END_PROFILE(SMBwriteBs);
return;
}