1
0
mirror of https://github.com/samba-team/samba.git synced 2025-08-04 08:22:08 +03:00

libsmb/namequery.c: add saf_join_store() function

saf_join_store() should be called after a successful
domain join, the affinity to the dc used at join time
has a larger ttl, to avoid problems with delayed replication.

metze

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Signed-off-by: Günther Deschner <gd@samba.org>
This commit is contained in:
Stefan Metzmacher
2008-10-27 19:31:30 +01:00
committed by Günther Deschner
parent c127367b1d
commit 80e74a27c5

View File

@ -34,6 +34,8 @@ BOOL global_in_nmbd = False;
****************************************************************************/
#define SAFKEY_FMT "SAF/DOMAIN/%s"
#define SAF_TTL 900
#define SAFJOINKEY_FMT "SAFJOIN/DOMAIN/%s"
#define SAFJOIN_TTL 3600
static char *saf_key(const char *domain)
{
@ -44,6 +46,15 @@ static char *saf_key(const char *domain)
return keystr;
}
static char *saf_join_key(const char *domain)
{
char *keystr;
asprintf( &keystr, SAFJOINKEY_FMT, strupper_static(domain) );
return keystr;
}
/****************************************************************************
****************************************************************************/
@ -67,7 +78,7 @@ BOOL saf_store( const char *domain, const char *servername )
return False;
key = saf_key( domain );
expire = time( NULL ) + SAF_TTL;
expire = time( NULL ) + lp_parm_int(-1, "saf","ttl", SAF_TTL);
DEBUG(10,("saf_store: domain = [%s], server = [%s], expire = [%u]\n",
@ -80,6 +91,38 @@ BOOL saf_store( const char *domain, const char *servername )
return ret;
}
BOOL saf_join_store( const char *domain, const char *servername )
{
char *key;
time_t expire;
BOOL ret = False;
if ( !domain || !servername ) {
DEBUG(2,("saf_join_store: Refusing to store empty domain or servername!\n"));
return False;
}
if ( (strlen(domain) == 0) || (strlen(servername) == 0) ) {
DEBUG(0,("saf_join_store: refusing to store 0 length domain or servername!\n"));
return False;
}
if ( !gencache_init() )
return False;
key = saf_join_key( domain );
expire = time( NULL ) + lp_parm_int(-1, "saf","join ttl", SAFJOIN_TTL);
DEBUG(10,("saf_join_store: domain = [%s], server = [%s], expire = [%u]\n",
domain, servername, (unsigned int)expire ));
ret = gencache_set( key, servername, expire );
SAFE_FREE( key );
return ret;
}
BOOL saf_delete( const char *domain )
{
char *key;
@ -93,15 +136,22 @@ BOOL saf_delete( const char *domain )
if ( !gencache_init() )
return False;
key = saf_join_key(domain);
ret = gencache_del(key);
SAFE_FREE(key);
if (ret) {
DEBUG(10,("saf_delete[join]: domain = [%s]\n", domain ));
}
key = saf_key(domain);
ret = gencache_del(key);
SAFE_FREE(key);
if (ret) {
DEBUG(10,("saf_delete: domain = [%s]\n", domain ));
}
SAFE_FREE( key );
return ret;
}
@ -122,7 +172,19 @@ char *saf_fetch( const char *domain )
if ( !gencache_init() )
return False;
key = saf_join_key( domain );
ret = gencache_get( key, &server, &timeout );
SAFE_FREE( key );
if ( ret ) {
DEBUG(5,("saf_fetch[join]: Returning \"%s\" for \"%s\" domain\n",
server, domain ));
return server;
}
key = saf_key( domain );
ret = gencache_get( key, &server, &timeout );