summaryrefslogtreecommitdiff
path: root/source3
diff options
context:
space:
mode:
Diffstat (limited to 'source3')
-rw-r--r--source3/Makefile.in3
-rw-r--r--source3/include/proto.h3
-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
-rw-r--r--source3/libsmb/dsgetdcname.c1
-rw-r--r--source3/libsmb/namequery.c1
-rw-r--r--source3/libsmb/namequery_dc.c1
-rw-r--r--source3/utils/net_lookup.c1
-rw-r--r--source3/winbindd/winbindd_cm.c1
11 files changed, 172 insertions, 117 deletions
diff --git a/source3/Makefile.in b/source3/Makefile.in
index c4093084c4..e966023a1a 100644
--- a/source3/Makefile.in
+++ b/source3/Makefile.in
@@ -464,7 +464,8 @@ LIBNBT_OBJ = ../libcli/nbt/nbtname.o \
../librpc/ndr/ndr_svcctl.o
LIBNMB_OBJ = libsmb/unexpected.o libsmb/namecache.o libsmb/nmblib.o \
- libsmb/namequery.o ../libcli/nbt/lmhosts.o libsmb/conncache.o libads/dns.o
+ libsmb/namequery.o ../libcli/nbt/lmhosts.o libsmb/conncache.o \
+ libads/dns.o libads/sitename_cache.o
NTERR_OBJ = libsmb/nterr.o libsmb/smberr.o
DOSERR_OBJ = ../libcli/util/doserr.o
diff --git a/source3/include/proto.h b/source3/include/proto.h
index ca1a38ba24..f8c3032ff1 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -1748,9 +1748,6 @@ NTSTATUS ads_dns_lookup_ns(TALLOC_CTX *ctx,
const char *dnsdomain,
struct dns_rr_ns **nslist,
int *numns);
-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);
NTSTATUS ads_dns_query_dcs(TALLOC_CTX *ctx,
const char *realm,
const char *sitename,
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_ */
diff --git a/source3/libsmb/dsgetdcname.c b/source3/libsmb/dsgetdcname.c
index 00339d2d32..6e67e050fe 100644
--- a/source3/libsmb/dsgetdcname.c
+++ b/source3/libsmb/dsgetdcname.c
@@ -21,6 +21,7 @@
*/
#include "includes.h"
+#include "libads/sitename_cache.h"
#define DSGETDCNAME_FMT "DSGETDCNAME/DOMAIN/%s"
/* 15 minutes */
diff --git a/source3/libsmb/namequery.c b/source3/libsmb/namequery.c
index ed718ce536..a77f5e4b46 100644
--- a/source3/libsmb/namequery.c
+++ b/source3/libsmb/namequery.c
@@ -19,6 +19,7 @@
*/
#include "includes.h"
+#include "libads/sitename_cache.h"
/* nmbd.c sets this to True. */
bool global_in_nmbd = False;
diff --git a/source3/libsmb/namequery_dc.c b/source3/libsmb/namequery_dc.c
index 7b0748f86b..3b3470dcf3 100644
--- a/source3/libsmb/namequery_dc.c
+++ b/source3/libsmb/namequery_dc.c
@@ -23,6 +23,7 @@
#include "includes.h"
+#include "libads/sitename_cache.h"
/**********************************************************************
Is this our primary domain ?
diff --git a/source3/utils/net_lookup.c b/source3/utils/net_lookup.c
index 658e904f59..102f1b263f 100644
--- a/source3/utils/net_lookup.c
+++ b/source3/utils/net_lookup.c
@@ -18,6 +18,7 @@
#include "includes.h"
#include "utils/net.h"
+#include "libads/sitename_cache.h"
int net_lookup_usage(struct net_context *c, int argc, const char **argv)
{
diff --git a/source3/winbindd/winbindd_cm.c b/source3/winbindd/winbindd_cm.c
index ed06dde2ff..6bdeac1bd7 100644
--- a/source3/winbindd/winbindd_cm.c
+++ b/source3/winbindd/winbindd_cm.c
@@ -65,6 +65,7 @@
#include "../librpc/gen_ndr/cli_samr.h"
#include "../librpc/gen_ndr/cli_lsa.h"
#include "../librpc/gen_ndr/cli_dssetup.h"
+#include "libads/sitename_cache.h"
#undef DBGC_CLASS
#define DBGC_CLASS DBGC_WINBIND