mirror of
https://github.com/samba-team/samba.git
synced 2025-08-14 09:49:28 +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:
committed by
Günther Deschner
parent
c127367b1d
commit
80e74a27c5
@ -34,6 +34,8 @@ BOOL global_in_nmbd = False;
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
#define SAFKEY_FMT "SAF/DOMAIN/%s"
|
#define SAFKEY_FMT "SAF/DOMAIN/%s"
|
||||||
#define SAF_TTL 900
|
#define SAF_TTL 900
|
||||||
|
#define SAFJOINKEY_FMT "SAFJOIN/DOMAIN/%s"
|
||||||
|
#define SAFJOIN_TTL 3600
|
||||||
|
|
||||||
static char *saf_key(const char *domain)
|
static char *saf_key(const char *domain)
|
||||||
{
|
{
|
||||||
@ -44,6 +46,15 @@ static char *saf_key(const char *domain)
|
|||||||
return keystr;
|
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;
|
return False;
|
||||||
|
|
||||||
key = saf_key( domain );
|
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",
|
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;
|
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 )
|
BOOL saf_delete( const char *domain )
|
||||||
{
|
{
|
||||||
char *key;
|
char *key;
|
||||||
@ -93,15 +136,22 @@ BOOL saf_delete( const char *domain )
|
|||||||
if ( !gencache_init() )
|
if ( !gencache_init() )
|
||||||
return False;
|
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);
|
key = saf_key(domain);
|
||||||
ret = gencache_del(key);
|
ret = gencache_del(key);
|
||||||
|
SAFE_FREE(key);
|
||||||
|
|
||||||
if (ret) {
|
if (ret) {
|
||||||
DEBUG(10,("saf_delete: domain = [%s]\n", domain ));
|
DEBUG(10,("saf_delete: domain = [%s]\n", domain ));
|
||||||
}
|
}
|
||||||
|
|
||||||
SAFE_FREE( key );
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -123,6 +173,18 @@ char *saf_fetch( const char *domain )
|
|||||||
if ( !gencache_init() )
|
if ( !gencache_init() )
|
||||||
return False;
|
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 );
|
key = saf_key( domain );
|
||||||
|
|
||||||
ret = gencache_get( key, &server, &timeout );
|
ret = gencache_get( key, &server, &timeout );
|
||||||
|
Reference in New Issue
Block a user