mirror of
https://github.com/samba-team/samba.git
synced 2025-02-23 09:57:40 +03:00
r18313: Nobody said "no" (yet.... gd?), so commit it:
Remove the account_policy_migrated() thingy, and make cache_account_policy_set use gencache. Account policies are now handled like groups and users are with respect to "passdb backend". Volker (This used to be commit fa8b2e2a585ab0c00a5fbde7aa790043261caf2e)
This commit is contained in:
parent
eab60e2bb1
commit
716f7245d9
@ -28,7 +28,6 @@ static TDB_CONTEXT *tdb;
|
||||
* ldap directly) - gd */
|
||||
|
||||
#define DATABASE_VERSION 3
|
||||
#define AP_LASTSET "LAST_CACHE_UPDATE"
|
||||
#define AP_TTL 60
|
||||
|
||||
|
||||
@ -168,50 +167,6 @@ int account_policy_name_to_fieldnum(const char *name)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
Update LAST-Set counter inside the cache
|
||||
*****************************************************************************/
|
||||
|
||||
static BOOL account_policy_cache_timestamp(uint32 *value, BOOL update,
|
||||
const char *ap_name)
|
||||
{
|
||||
pstring key;
|
||||
uint32 val = 0;
|
||||
time_t now;
|
||||
|
||||
if (ap_name == NULL)
|
||||
return False;
|
||||
|
||||
slprintf(key, sizeof(key)-1, "%s/%s", ap_name, AP_LASTSET);
|
||||
|
||||
if (!init_account_policy()) {
|
||||
return False;
|
||||
}
|
||||
|
||||
if (!tdb_fetch_uint32(tdb, key, &val) && !update) {
|
||||
DEBUG(10,("failed to get last set timestamp of cache\n"));
|
||||
return False;
|
||||
}
|
||||
|
||||
*value = val;
|
||||
|
||||
DEBUG(10, ("account policy cache lastset was: %s\n", http_timestring(val)));
|
||||
|
||||
if (update) {
|
||||
|
||||
now = time(NULL);
|
||||
|
||||
if (!tdb_store_uint32(tdb, key, (uint32)now)) {
|
||||
DEBUG(1, ("tdb_store_uint32 failed for %s\n", key));
|
||||
return False;
|
||||
}
|
||||
DEBUG(10, ("account policy cache lastset now: %s\n", http_timestring(now)));
|
||||
*value = now;
|
||||
}
|
||||
|
||||
return True;
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
Get default value for account policy
|
||||
*****************************************************************************/
|
||||
@ -269,11 +224,6 @@ BOOL init_account_policy(void)
|
||||
DEBUG(0,("Failed to open account policy database\n"));
|
||||
return False;
|
||||
}
|
||||
/* creation was successful */
|
||||
/* add AP_MIGRATED_TO_PASSDB speacial key */
|
||||
/* so that you do not need to migrate policies */
|
||||
/* on brand new servers as it does not make sense */
|
||||
account_policy_migrated(True);
|
||||
}
|
||||
|
||||
/* handle a Samba upgrade */
|
||||
@ -319,7 +269,7 @@ Get an account policy (from tdb)
|
||||
|
||||
BOOL account_policy_get(int field, uint32 *value)
|
||||
{
|
||||
fstring name;
|
||||
const char *name;
|
||||
uint32 regval;
|
||||
|
||||
if (!init_account_policy()) {
|
||||
@ -330,8 +280,8 @@ BOOL account_policy_get(int field, uint32 *value)
|
||||
*value = 0;
|
||||
}
|
||||
|
||||
fstrcpy(name, decode_account_policy_name(field));
|
||||
if (!*name) {
|
||||
name = decode_account_policy_name(field);
|
||||
if (name == NULL) {
|
||||
DEBUG(1, ("account_policy_get: Field %d is not a valid account policy type! Cannot get, returning 0.\n", field));
|
||||
return False;
|
||||
}
|
||||
@ -356,14 +306,14 @@ Set an account policy (in tdb)
|
||||
|
||||
BOOL account_policy_set(int field, uint32 value)
|
||||
{
|
||||
fstring name;
|
||||
const char *name;
|
||||
|
||||
if (!init_account_policy()) {
|
||||
return False;
|
||||
}
|
||||
|
||||
fstrcpy(name, decode_account_policy_name(field));
|
||||
if (!*name) {
|
||||
name = decode_account_policy_name(field);
|
||||
if (name == NULL) {
|
||||
DEBUG(1, ("Field %d is not a valid account policy type! Cannot set.\n", field));
|
||||
return False;
|
||||
}
|
||||
@ -384,8 +334,10 @@ Set an account policy in the cache
|
||||
|
||||
BOOL cache_account_policy_set(int field, uint32 value)
|
||||
{
|
||||
uint32 lastset;
|
||||
const char *policy_name = NULL;
|
||||
char *cache_key = NULL;
|
||||
char *cache_value = NULL;
|
||||
BOOL ret = False;
|
||||
|
||||
policy_name = decode_account_policy_name(field);
|
||||
if (policy_name == NULL) {
|
||||
@ -393,95 +345,60 @@ BOOL cache_account_policy_set(int field, uint32 value)
|
||||
return False;
|
||||
}
|
||||
|
||||
if (asprintf(&cache_key, "ACCT_POL/%s", policy_name) < 0) {
|
||||
DEBUG(0, ("asprintf failed\n"));
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (asprintf(&cache_value, "%lu\n", (unsigned long)value) < 0) {
|
||||
DEBUG(0, ("asprintf failed\n"));
|
||||
goto done;
|
||||
}
|
||||
|
||||
DEBUG(10,("cache_account_policy_set: updating account pol cache\n"));
|
||||
|
||||
if (!account_policy_set(field, value)) {
|
||||
return False;
|
||||
}
|
||||
ret = gencache_set(cache_key, cache_value, time(NULL)+AP_TTL);
|
||||
|
||||
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;
|
||||
done:
|
||||
SAFE_FREE(cache_key);
|
||||
SAFE_FREE(cache_value);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
Check whether account policies have been migrated to passdb
|
||||
*****************************************************************************/
|
||||
|
||||
BOOL account_policy_migrated(BOOL init)
|
||||
{
|
||||
pstring key;
|
||||
uint32 val;
|
||||
time_t now;
|
||||
|
||||
slprintf(key, sizeof(key)-1, "AP_MIGRATED_TO_PASSDB");
|
||||
|
||||
if (!init_account_policy()) {
|
||||
return False;
|
||||
}
|
||||
|
||||
if (init) {
|
||||
now = time(NULL);
|
||||
|
||||
if (!tdb_store_uint32(tdb, key, (uint32)now)) {
|
||||
DEBUG(1, ("tdb_store_uint32 failed for %s\n", key));
|
||||
return False;
|
||||
}
|
||||
|
||||
return True;
|
||||
}
|
||||
|
||||
if (!tdb_fetch_uint32(tdb, key, &val)) {
|
||||
return False;
|
||||
}
|
||||
|
||||
return True;
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
Remove marker that informs that account policies have been migrated to passdb
|
||||
*****************************************************************************/
|
||||
|
||||
BOOL remove_account_policy_migrated(void)
|
||||
{
|
||||
if (!init_account_policy()) {
|
||||
return False;
|
||||
}
|
||||
|
||||
return tdb_delete_bystring(tdb, "AP_MIGRATED_TO_PASSDB");
|
||||
}
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
Get an account policy from the cache
|
||||
*****************************************************************************/
|
||||
|
||||
BOOL cache_account_policy_get(int field, uint32 *value)
|
||||
{
|
||||
uint32 lastset;
|
||||
const char *policy_name = NULL;
|
||||
char *cache_key = NULL;
|
||||
char *cache_value = NULL;
|
||||
BOOL ret = False;
|
||||
|
||||
if (!account_policy_cache_timestamp(&lastset, False,
|
||||
decode_account_policy_name(field)))
|
||||
{
|
||||
DEBUG(10,("cache_account_policy_get: failed to get latest cache update timestamp\n"));
|
||||
policy_name = decode_account_policy_name(field);
|
||||
if (policy_name == NULL) {
|
||||
DEBUG(0,("cache_account_policy_set: no policy found\n"));
|
||||
return False;
|
||||
}
|
||||
|
||||
if ((lastset + AP_TTL) < (uint32)time(NULL) ) {
|
||||
DEBUG(10,("cache_account_policy_get: no valid cache entry (cache expired)\n"));
|
||||
return False;
|
||||
}
|
||||
if (asprintf(&cache_key, "ACCT_POL/%s", policy_name) < 0) {
|
||||
DEBUG(0, ("asprintf failed\n"));
|
||||
goto done;
|
||||
}
|
||||
|
||||
return account_policy_get(field, value);
|
||||
if (gencache_get(cache_key, &cache_value, NULL)) {
|
||||
uint32 tmp = strtoul(cache_value, NULL, 10);
|
||||
*value = tmp;
|
||||
ret = True;
|
||||
}
|
||||
|
||||
done:
|
||||
SAFE_FREE(cache_key);
|
||||
SAFE_FREE(cache_value);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
/****************************************************************************
|
||||
****************************************************************************/
|
||||
|
||||
|
@ -3495,11 +3495,6 @@ static NTSTATUS ldapsam_set_account_policy_in_ldap(struct pdb_methods *methods,
|
||||
static NTSTATUS ldapsam_set_account_policy(struct pdb_methods *methods,
|
||||
int policy_index, uint32 value)
|
||||
{
|
||||
if (!account_policy_migrated(False)) {
|
||||
return (account_policy_set(policy_index, value)) ?
|
||||
NT_STATUS_OK : NT_STATUS_UNSUCCESSFUL;
|
||||
}
|
||||
|
||||
return ldapsam_set_account_policy_in_ldap(methods, policy_index,
|
||||
value);
|
||||
}
|
||||
@ -3588,11 +3583,6 @@ static NTSTATUS ldapsam_get_account_policy(struct pdb_methods *methods,
|
||||
{
|
||||
NTSTATUS ntstatus = NT_STATUS_UNSUCCESSFUL;
|
||||
|
||||
if (!account_policy_migrated(False)) {
|
||||
return (account_policy_get(policy_index, value))
|
||||
? NT_STATUS_OK : NT_STATUS_UNSUCCESSFUL;
|
||||
}
|
||||
|
||||
if (cache_account_policy_get(policy_index, value)) {
|
||||
DEBUG(11,("ldapsam_get_account_policy: got valid value from "
|
||||
"cache\n"));
|
||||
|
@ -176,11 +176,6 @@ static int reinit_account_policies (void)
|
||||
}
|
||||
}
|
||||
|
||||
if (!remove_account_policy_migrated()) {
|
||||
fprintf(stderr, "Can't remove marker from tdb\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -193,11 +188,6 @@ static int export_account_policies (struct pdb_methods *in, struct pdb_methods *
|
||||
{
|
||||
int i;
|
||||
|
||||
if (!account_policy_migrated(True)) {
|
||||
fprintf(stderr, "Unable to set account policy marker in tdb\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
for ( i=1; decode_account_policy_name(i) != NULL; i++ ) {
|
||||
uint32 policy_value;
|
||||
NTSTATUS status;
|
||||
@ -206,7 +196,6 @@ static int export_account_policies (struct pdb_methods *in, struct pdb_methods *
|
||||
|
||||
if ( NT_STATUS_IS_ERR(status) ) {
|
||||
fprintf(stderr, "Unable to get account policy from %s\n", in->name);
|
||||
remove_account_policy_migrated();
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -214,7 +203,6 @@ static int export_account_policies (struct pdb_methods *in, struct pdb_methods *
|
||||
|
||||
if ( NT_STATUS_IS_ERR(status) ) {
|
||||
fprintf(stderr, "Unable to migrate account policy to %s\n", out->name);
|
||||
remove_account_policy_migrated();
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user