summaryrefslogtreecommitdiffstats
path: root/source3/libads
diff options
context:
space:
mode:
authorSimo Sorce <idra@samba.org>2010-02-23 11:11:37 -0500
committerSimo Sorce <idra@samba.org>2010-02-23 12:46:26 -0500
commit61b7a24f16c9d3a3c41df19ac7073571164eb47a (patch)
tree4e1b53acabc9eb1b5e9888d6f9cf1d0896c2420a /source3/libads
parentc31cf0a1b5b113c1221477238efa6b131e884bcf (diff)
downloadsamba-61b7a24f16c9d3a3c41df19ac7073571164eb47a.tar.gz
samba-61b7a24f16c9d3a3c41df19ac7073571164eb47a.tar.xz
samba-61b7a24f16c9d3a3c41df19ac7073571164eb47a.zip
s3 move the sitename cache in its own file
Diffstat (limited to 'source3/libads')
-rw-r--r--source3/libads/dns.c113
-rw-r--r--source3/libads/ldap.c1
-rw-r--r--source3/libads/sitename_cache.c136
-rw-r--r--source3/libads/sitename_cache.h28
4 files changed, 165 insertions, 113 deletions
diff --git a/source3/libads/dns.c b/source3/libads/dns.c
index 2fa6f18c77..dc573e3a46 100644
--- a/source3/libads/dns.c
+++ b/source3/libads/dns.c
@@ -726,119 +726,6 @@ NTSTATUS ads_dns_lookup_ns(TALLOC_CTX *ctx,
return NT_STATUS_OK;
}
-/****************************************************************************
- Store and fetch the AD client sitename.
-****************************************************************************/
-
-#define SITENAME_KEY "AD_SITENAME/DOMAIN/%s"
-
-static char *sitename_key(const char *realm)
-{
- char *keystr;
-
- if (asprintf_strupper_m(&keystr, SITENAME_KEY, realm) == -1) {
- return NULL;
- }
-
- return keystr;
-}
-
-
-/****************************************************************************
- Store the AD client sitename.
- We store indefinately as every new CLDAP query will re-write this.
-****************************************************************************/
-
-bool sitename_store(const char *realm, const char *sitename)
-{
- time_t expire;
- bool ret = False;
- char *key;
-
- if (!realm || (strlen(realm) == 0)) {
- DEBUG(0,("sitename_store: no realm\n"));
- return False;
- }
-
- key = sitename_key(realm);
-
- if (!sitename || (sitename && !*sitename)) {
- DEBUG(5,("sitename_store: deleting empty sitename!\n"));
- ret = gencache_del(key);
- SAFE_FREE(key);
- return ret;
- }
-
- expire = get_time_t_max(); /* Store indefinately. */
-
- DEBUG(10,("sitename_store: realm = [%s], sitename = [%s], expire = [%u]\n",
- realm, sitename, (unsigned int)expire ));
-
- ret = gencache_set( key, sitename, expire );
- SAFE_FREE(key);
- return ret;
-}
-
-/****************************************************************************
- Fetch the AD client sitename.
- Caller must free.
-****************************************************************************/
-
-char *sitename_fetch(const char *realm)
-{
- char *sitename = NULL;
- time_t timeout;
- bool ret = False;
- const char *query_realm;
- char *key;
-
- if (!realm || (strlen(realm) == 0)) {
- query_realm = lp_realm();
- } else {
- query_realm = realm;
- }
-
- key = sitename_key(query_realm);
-
- ret = gencache_get( key, &sitename, &timeout );
- SAFE_FREE(key);
- if ( !ret ) {
- DEBUG(5,("sitename_fetch: No stored sitename for %s\n",
- query_realm));
- } else {
- DEBUG(5,("sitename_fetch: Returning sitename for %s: \"%s\"\n",
- query_realm, sitename ));
- }
- return sitename;
-}
-
-/****************************************************************************
- Did the sitename change ?
-****************************************************************************/
-
-bool stored_sitename_changed(const char *realm, const char *sitename)
-{
- bool ret = False;
-
- char *new_sitename;
-
- if (!realm || (strlen(realm) == 0)) {
- DEBUG(0,("stored_sitename_changed: no realm\n"));
- return False;
- }
-
- new_sitename = sitename_fetch(realm);
-
- if (sitename && new_sitename && !strequal(sitename, new_sitename)) {
- ret = True;
- } else if ((sitename && !new_sitename) ||
- (!sitename && new_sitename)) {
- ret = True;
- }
- SAFE_FREE(new_sitename);
- return ret;
-}
-
/********************************************************************
Query with optional sitename.
********************************************************************/
diff --git a/source3/libads/ldap.c b/source3/libads/ldap.c
index 33d22d04ec..df45be5f8a 100644
--- a/source3/libads/ldap.c
+++ b/source3/libads/ldap.c
@@ -23,6 +23,7 @@
#include "includes.h"
#include "lib/ldb/include/ldb.h"
+#include "libads/sitename_cache.h"
#ifdef HAVE_LDAP
diff --git a/source3/libads/sitename_cache.c b/source3/libads/sitename_cache.c
new file mode 100644
index 0000000000..cb1bae5239
--- /dev/null
+++ b/source3/libads/sitename_cache.c
@@ -0,0 +1,136 @@
+/*
+ Unix SMB/CIFS implementation.
+ DNS utility library
+ Copyright (C) Gerald (Jerry) Carter 2006.
+ Copyright (C) Jeremy Allison 2007.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "includes.h"
+#include "libads/sitename_cache.h"
+
+/****************************************************************************
+ Store and fetch the AD client sitename.
+****************************************************************************/
+
+#define SITENAME_KEY "AD_SITENAME/DOMAIN/%s"
+
+static char *sitename_key(const char *realm)
+{
+ char *keystr;
+
+ if (asprintf_strupper_m(&keystr, SITENAME_KEY, realm) == -1) {
+ return NULL;
+ }
+
+ return keystr;
+}
+
+
+/****************************************************************************
+ Store the AD client sitename.
+ We store indefinately as every new CLDAP query will re-write this.
+****************************************************************************/
+
+bool sitename_store(const char *realm, const char *sitename)
+{
+ time_t expire;
+ bool ret = False;
+ char *key;
+
+ if (!realm || (strlen(realm) == 0)) {
+ DEBUG(0,("sitename_store: no realm\n"));
+ return False;
+ }
+
+ key = sitename_key(realm);
+
+ if (!sitename || (sitename && !*sitename)) {
+ DEBUG(5,("sitename_store: deleting empty sitename!\n"));
+ ret = gencache_del(key);
+ SAFE_FREE(key);
+ return ret;
+ }
+
+ expire = get_time_t_max(); /* Store indefinately. */
+
+ DEBUG(10,("sitename_store: realm = [%s], sitename = [%s], expire = [%u]\n",
+ realm, sitename, (unsigned int)expire ));
+
+ ret = gencache_set( key, sitename, expire );
+ SAFE_FREE(key);
+ return ret;
+}
+
+/****************************************************************************
+ Fetch the AD client sitename.
+ Caller must free.
+****************************************************************************/
+
+char *sitename_fetch(const char *realm)
+{
+ char *sitename = NULL;
+ time_t timeout;
+ bool ret = False;
+ const char *query_realm;
+ char *key;
+
+ if (!realm || (strlen(realm) == 0)) {
+ query_realm = lp_realm();
+ } else {
+ query_realm = realm;
+ }
+
+ key = sitename_key(query_realm);
+
+ ret = gencache_get( key, &sitename, &timeout );
+ SAFE_FREE(key);
+ if ( !ret ) {
+ DEBUG(5,("sitename_fetch: No stored sitename for %s\n",
+ query_realm));
+ } else {
+ DEBUG(5,("sitename_fetch: Returning sitename for %s: \"%s\"\n",
+ query_realm, sitename ));
+ }
+ return sitename;
+}
+
+/****************************************************************************
+ Did the sitename change ?
+****************************************************************************/
+
+bool stored_sitename_changed(const char *realm, const char *sitename)
+{
+ bool ret = False;
+
+ char *new_sitename;
+
+ if (!realm || (strlen(realm) == 0)) {
+ DEBUG(0,("stored_sitename_changed: no realm\n"));
+ return False;
+ }
+
+ new_sitename = sitename_fetch(realm);
+
+ if (sitename && new_sitename && !strequal(sitename, new_sitename)) {
+ ret = True;
+ } else if ((sitename && !new_sitename) ||
+ (!sitename && new_sitename)) {
+ ret = True;
+ }
+ SAFE_FREE(new_sitename);
+ return ret;
+}
+
diff --git a/source3/libads/sitename_cache.h b/source3/libads/sitename_cache.h
new file mode 100644
index 0000000000..4e62f00a61
--- /dev/null
+++ b/source3/libads/sitename_cache.h
@@ -0,0 +1,28 @@
+/*
+ Unix SMB/CIFS implementation.
+ DNS utility library
+ Copyright (C) Gerald (Jerry) Carter 2006.
+ Copyright (C) Jeremy Allison 2007.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef _LIBADS_SITENAME_CACHE_H_
+#define _LIBADS_SITENAME_CACHE_H_
+
+bool sitename_store(const char *realm, const char *sitename);
+char *sitename_fetch(const char *realm);
+bool stored_sitename_changed(const char *realm, const char *sitename);
+
+#endif /* _LIBADS_SITENAME_CACHE_H_ */