summaryrefslogtreecommitdiff
path: root/source3/passdb/pdb_interface.c
diff options
context:
space:
mode:
Diffstat (limited to 'source3/passdb/pdb_interface.c')
-rw-r--r--source3/passdb/pdb_interface.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/source3/passdb/pdb_interface.c b/source3/passdb/pdb_interface.c
index ed05e5ad42..c656e08722 100644
--- a/source3/passdb/pdb_interface.c
+++ b/source3/passdb/pdb_interface.c
@@ -708,22 +708,44 @@ BOOL pdb_getsampwsid(SAM_ACCOUNT *sam_acct, const DOM_SID *sid)
BOOL pdb_add_sam_account(SAM_ACCOUNT *sam_acct)
{
struct pdb_context *pdb_context = pdb_get_static_context(False);
+ const char *lm_pw, *nt_pw;
+ uint16 acb_flags;
if (!pdb_context) {
return False;
}
+ /* disable acccounts with no passwords */
+ lm_pw = pdb_get_lanman_passwd( sam_acct );
+ nt_pw = pdb_get_lanman_passwd( sam_acct );
+ if ( !lm_pw || !nt_pw ) {
+ acb_flags = pdb_get_acct_ctrl( sam_acct ) | ACB_DISABLED;
+ pdb_set_acct_ctrl( sam_acct, acb_flags, PDB_SET );
+ pdb_set_init_flags(sam_acct, PDB_ACCTCTRL, PDB_SET);
+ }
+
return NT_STATUS_IS_OK(pdb_context->pdb_add_sam_account(pdb_context, sam_acct));
}
BOOL pdb_update_sam_account(SAM_ACCOUNT *sam_acct)
{
struct pdb_context *pdb_context = pdb_get_static_context(False);
+ const char *lm_pw, *nt_pw;
+ uint16 acb_flags;
if (!pdb_context) {
return False;
}
+ /* disable acccounts with no passwords */
+ lm_pw = pdb_get_lanman_passwd( sam_acct );
+ nt_pw = pdb_get_lanman_passwd( sam_acct );
+ if ( !lm_pw || !nt_pw ) {
+ acb_flags = pdb_get_acct_ctrl( sam_acct ) | ACB_DISABLED;
+ pdb_set_acct_ctrl( sam_acct, acb_flags, PDB_SET );
+ pdb_set_init_flags(sam_acct, PDB_ACCTCTRL, PDB_SET);
+ }
+
return NT_STATUS_IS_OK(pdb_context->pdb_update_sam_account(pdb_context, sam_acct));
}