BOOL cache_account_policy_set(int field, uint32 value) { uint32 lastset; const char *policy_name = NULL; policy_name = decode_account_policy_name(field); if (policy_name == NULL) { DEBUG(0,("cache_account_policy_set: no policy found\n")); return False; } DEBUG(10,("cache_account_policy_set: updating account pol cache\n")); if (!account_policy_set(field, value)) { return False; } if (!account_policy_cache_timestamp(&lastset, True, policy_name)) { DEBUG(10,("cache_account_policy_set: failed to get lastest cache update timestamp\n")); return False; } DEBUG(10,("cache_account_policy_set: cache valid until: %s\n", http_timestring(lastset+AP_TTL))); return True; }
static BOOL account_policy_set_default_on_empty(int account_policy) { uint32 value; if (!account_policy_get(account_policy, &value) && !account_policy_get_default(account_policy, &value)) { return False; } return account_policy_set(account_policy, value); }
static int reinit_account_policies (void) { int i; for (i=1; decode_account_policy_name(i) != NULL; i++) { uint32_t policy_value; if (!account_policy_get_default(i, &policy_value)) { fprintf(stderr, "Can't get default account policy\n"); return -1; } if (!account_policy_set(i, policy_value)) { fprintf(stderr, "Can't set account policy in tdb\n"); return -1; } } return 0; }
BOOL init_account_policy(void) { static pid_t local_pid; const char *vstring = "INFO/version"; uint32 version; if (tdb && local_pid == sys_getpid()) return True; tdb = tdb_open_log(lock_path("account_policy.tdb"), 0, TDB_DEFAULT, O_RDWR|O_CREAT, 0600); if (!tdb) { DEBUG(0,("Failed to open account policy database\n")); return False; } local_pid = sys_getpid(); /* handle a Samba upgrade */ tdb_lock_bystring(tdb, vstring,0); if (!tdb_fetch_uint32(tdb, vstring, &version) || version != DATABASE_VERSION) { tdb_traverse(tdb, tdb_traverse_delete_fn, NULL); tdb_store_uint32(tdb, vstring, DATABASE_VERSION); account_policy_set(AP_MIN_PASSWORD_LEN, MINPASSWDLENGTH); /* 5 chars minimum */ account_policy_set(AP_PASSWORD_HISTORY, 0); /* don't keep any old password */ account_policy_set(AP_USER_MUST_LOGON_TO_CHG_PASS, 0); /* don't force user to logon */ account_policy_set(AP_MAX_PASSWORD_AGE, (uint32)-1); /* don't expire */ account_policy_set(AP_MIN_PASSWORD_AGE, 0); /* 0 days */ account_policy_set(AP_LOCK_ACCOUNT_DURATION, 30); /* lockout for 30 minutes */ account_policy_set(AP_RESET_COUNT_TIME, 30); /* reset after 30 minutes */ account_policy_set(AP_BAD_ATTEMPT_LOCKOUT, 0); /* don't lockout */ account_policy_set(AP_TIME_TO_LOGOUT, -1); /* don't force logout */ } tdb_unlock_bystring(tdb, vstring); return True; }