+++ /dev/null
-^samba.unittests.auth.sam.test_success_accounting_add_control_failed.none
-^samba.unittests.auth.sam.test_success_accounting_build_mod_req_failed.none
-^samba.unittests.auth.sam.test_success_accounting_commit_failed.none
-^samba.unittests.auth.sam.test_success_accounting_ldb_msg_new_failed.none
-^samba.unittests.auth.sam.test_success_accounting_ldb_request_failed.none
-^samba.unittests.auth.sam.test_success_accounting_ldb_wait_failed.none
-^samba.unittests.auth.sam.test_success_accounting_reread_failed.none
-^samba.unittests.auth.sam.test_success_accounting_rollback_failed.none
-^samba.unittests.auth.sam.test_success_accounting_samdb_rodc_failed.none
-^samba.unittests.auth.sam.test_success_accounting_spurious_bad_pwd_indicator.none
-^samba.unittests.auth.sam.test_success_accounting_start_txn_failed.none
-^samba.unittests.auth.sam.test_success_accounting_update_lastlogon_failed.none
struct timeval tv_now;
NTTIME now;
NTTIME lastLogonTimestamp;
+ int64_t lockOutObservationWindow;
+ NTTIME sync_interval_nt = 0;
bool am_rodc = false;
bool txn_active = false;
bool need_db_reread;
return status;
}
+ if (interactive_or_kerberos == false) {
+ /*
+ * Avoid calculating this twice, it reads the PSO. A
+ * race on this is unimportant.
+ */
+ lockOutObservationWindow
+ = samdb_result_msds_LockoutObservationWindow(
+ sam_ctx, mem_ctx, domain_dn, msg);
+ }
+
+ ret = samdb_rodc(sam_ctx, &am_rodc);
+ if (ret != LDB_SUCCESS) {
+ status = NT_STATUS_INTERNAL_ERROR;
+ goto error;
+ }
+
+ if (!am_rodc) {
+ /*
+ * Avoid reading the main domain DN twice. A race on
+ * this is unimportant.
+ */
+ status = authsam_calculate_lastlogon_sync_interval(
+ sam_ctx, mem_ctx, domain_dn, &sync_interval_nt);
+
+ if (!NT_STATUS_IS_OK(status)) {
+ status = NT_STATUS_INTERNAL_ERROR;
+ goto error;
+ }
+ }
+
get_transaction:
if (need_db_reread) {
if (interactive_or_kerberos) {
badPwdCount = dbBadPwdCount;
} else {
- int64_t lockOutObservationWindow =
- samdb_result_msds_LockoutObservationWindow(
- sam_ctx, mem_ctx, domain_dn, msg);
+ /*
+ * We get lockOutObservationWindow above, before the
+ * transaction
+ */
badPwdCount = dsdb_effective_badPwdCount(
msg, lockOutObservationWindow, now);
}
}
}
- ret = samdb_rodc(sam_ctx, &am_rodc);
- if (ret != LDB_SUCCESS) {
- status = NT_STATUS_INTERNAL_ERROR;
- goto error;
- }
-
if (!am_rodc) {
- NTTIME sync_interval_nt;
-
- status = authsam_calculate_lastlogon_sync_interval(
- sam_ctx, mem_ctx, domain_dn, &sync_interval_nt);
-
- if (!NT_STATUS_IS_OK(status)) {
- status = NT_STATUS_INTERNAL_ERROR;
- goto error;
- }
-
status = authsam_update_lastlogon_timestamp(
sam_ctx,
msg_mod,