return keystr;
}
+static int unlock_trust_account(char *domain)
+{
+ tdb_unlock_bystring(tdb, trust_keystr(domain));
+ return 0;
+}
+
/************************************************************************
Lock the trust password entry.
************************************************************************/
-bool secrets_lock_trust_account_password(const char *domain, bool dolock)
+void *secrets_get_trust_account_lock(TALLOC_CTX *mem_ctx, const char *domain)
{
- if (!tdb)
- return False;
+ char *result;
- if (dolock)
- return (tdb_lock_bystring(tdb, trust_keystr(domain)) == 0);
- else
- tdb_unlock_bystring(tdb, trust_keystr(domain));
- return True;
+ if (!secrets_init()) {
+ return NULL;
+ }
+
+ result = talloc_strdup(mem_ctx, domain);
+ if (result == NULL) {
+ return NULL;
+ }
+
+ if (tdb_lock_bystring(tdb, trust_keystr(domain)) != 0) {
+ TALLOC_FREE(result);
+ return NULL;
+ }
+
+ talloc_set_destructor(result, unlock_trust_account);
+ return result;
}
/************************************************************************
unsigned char trust_passwd_hash[16];
time_t lct;
+ void *lock;
/*
* We're in domain level security, and the code that
* First, open the machine password file with an exclusive lock.
*/
- if (secrets_lock_trust_account_password(lp_workgroup(), True) == False) {
+ lock = secrets_get_trust_account_lock(NULL, lp_workgroup());
+
+ if (lock == NULL) {
DEBUG(0,("process: unable to lock the machine account password for \
machine %s in domain %s.\n", global_myname(), lp_workgroup() ));
return;
if(!secrets_fetch_trust_account_password(lp_workgroup(), trust_passwd_hash, &lct, NULL)) {
DEBUG(0,("process: unable to read the machine account password for \
machine %s in domain %s.\n", global_myname(), lp_workgroup()));
- secrets_lock_trust_account_password(lp_workgroup(), False);
+ TALLOC_FREE(lock);
return;
}
if(t < lct + lp_machine_password_timeout()) {
global_machine_password_needs_changing = False;
- secrets_lock_trust_account_password(lp_workgroup(), False);
+ TALLOC_FREE(lock);
return;
}
change_trust_account_password( lp_workgroup(), NULL);
global_machine_password_needs_changing = False;
- secrets_lock_trust_account_password(lp_workgroup(), False);
+ TALLOC_FREE(lock);
}
/* update printer queue caches if necessary */