2 Unix SMB/CIFS implementation.
4 Copyright (C) Gerald (Jerry) Carter 2006.
5 Copyright (C) Jeremy Allison 2007.
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>.
22 #include "libads/sitename_cache.h"
23 #include "lib/gencache.h"
25 /****************************************************************************
26 Store and fetch the AD client sitename.
27 ****************************************************************************/
29 #define SITENAME_KEY "AD_SITENAME/DOMAIN/%s"
31 static char *sitename_key(const char *realm
)
35 if (asprintf_strupper_m(&keystr
, SITENAME_KEY
, realm
) == -1) {
43 /****************************************************************************
44 Store the AD client sitename.
45 We store indefinately as every new CLDAP query will re-write this.
46 ****************************************************************************/
48 bool sitename_store(const char *realm
, const char *sitename
)
54 if (!realm
|| (strlen(realm
) == 0)) {
55 DEBUG(0,("sitename_store: no realm\n"));
59 key
= sitename_key(realm
);
61 if (!sitename
|| (sitename
&& !*sitename
)) {
62 DEBUG(5,("sitename_store: deleting empty sitename!\n"));
63 ret
= gencache_del(key
);
68 expire
= get_time_t_max(); /* Store indefinately. */
70 DEBUG(10,("sitename_store: realm = [%s], sitename = [%s], expire = [%u]\n",
71 realm
, sitename
, (unsigned int)expire
));
73 ret
= gencache_set( key
, sitename
, expire
);
78 /****************************************************************************
79 Fetch the AD client sitename.
81 ****************************************************************************/
83 char *sitename_fetch(TALLOC_CTX
*mem_ctx
, const char *realm
)
85 char *sitename
= NULL
;
88 const char *query_realm
;
91 if (!realm
|| (strlen(realm
) == 0)) {
92 query_realm
= lp_realm();
97 key
= sitename_key(query_realm
);
99 ret
= gencache_get( key
, mem_ctx
, &sitename
, &timeout
);
102 DBG_INFO("No stored sitename for realm '%s'\n", query_realm
);
104 DBG_INFO("Returning sitename for realm '%s': \"%s\"\n",
105 query_realm
, sitename
);
110 /****************************************************************************
111 Did the sitename change ?
112 ****************************************************************************/
114 bool stored_sitename_changed(const char *realm
, const char *sitename
)
120 if (!realm
|| (strlen(realm
) == 0)) {
121 DEBUG(0,("stored_sitename_changed: no realm\n"));
125 new_sitename
= sitename_fetch(talloc_tos(), realm
);
127 if (sitename
&& new_sitename
&& !strequal(sitename
, new_sitename
)) {
129 } else if ((sitename
&& !new_sitename
) ||
130 (!sitename
&& new_sitename
)) {
133 TALLOC_FREE(new_sitename
);