source: vendor/current/source3/libads/sitename_cache.c

Last change on this file was 988, checked in by Silvan Scherrer, 9 years ago

Samba Server: update vendor to version 4.4.3

File size: 3.6 KB
Line 
1/*
2 Unix SMB/CIFS implementation.
3 DNS utility library
4 Copyright (C) Gerald (Jerry) Carter 2006.
5 Copyright (C) Jeremy Allison 2007.
6
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.
11
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.
16
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/>.
19*/
20
21#include "includes.h"
22#include "libads/sitename_cache.h"
23
24/****************************************************************************
25 Store and fetch the AD client sitename.
26****************************************************************************/
27
28#define SITENAME_KEY "AD_SITENAME/DOMAIN/%s"
29
30static char *sitename_key(const char *realm)
31{
32 char *keystr;
33
34 if (asprintf_strupper_m(&keystr, SITENAME_KEY, realm) == -1) {
35 return NULL;
36 }
37
38 return keystr;
39}
40
41
42/****************************************************************************
43 Store the AD client sitename.
44 We store indefinately as every new CLDAP query will re-write this.
45****************************************************************************/
46
47bool sitename_store(const char *realm, const char *sitename)
48{
49 time_t expire;
50 bool ret = False;
51 char *key;
52
53 if (!realm || (strlen(realm) == 0)) {
54 DEBUG(0,("sitename_store: no realm\n"));
55 return False;
56 }
57
58 key = sitename_key(realm);
59
60 if (!sitename || (sitename && !*sitename)) {
61 DEBUG(5,("sitename_store: deleting empty sitename!\n"));
62 ret = gencache_del(key);
63 SAFE_FREE(key);
64 return ret;
65 }
66
67 expire = get_time_t_max(); /* Store indefinately. */
68
69 DEBUG(10,("sitename_store: realm = [%s], sitename = [%s], expire = [%u]\n",
70 realm, sitename, (unsigned int)expire ));
71
72 ret = gencache_set( key, sitename, expire );
73 SAFE_FREE(key);
74 return ret;
75}
76
77/****************************************************************************
78 Fetch the AD client sitename.
79 Caller must free.
80****************************************************************************/
81
82char *sitename_fetch(TALLOC_CTX *mem_ctx, const char *realm)
83{
84 char *sitename = NULL;
85 time_t timeout;
86 bool ret = False;
87 const char *query_realm;
88 char *key;
89
90 if (!realm || (strlen(realm) == 0)) {
91 query_realm = lp_realm();
92 } else {
93 query_realm = realm;
94 }
95
96 key = sitename_key(query_realm);
97
98 ret = gencache_get( key, mem_ctx, &sitename, &timeout );
99 SAFE_FREE(key);
100 if ( !ret ) {
101 DEBUG(5,("sitename_fetch: No stored sitename for %s\n",
102 query_realm));
103 } else {
104 DEBUG(5,("sitename_fetch: Returning sitename for %s: \"%s\"\n",
105 query_realm, sitename ));
106 }
107 return sitename;
108}
109
110/****************************************************************************
111 Did the sitename change ?
112****************************************************************************/
113
114bool stored_sitename_changed(const char *realm, const char *sitename)
115{
116 bool ret = False;
117
118 char *new_sitename;
119
120 if (!realm || (strlen(realm) == 0)) {
121 DEBUG(0,("stored_sitename_changed: no realm\n"));
122 return False;
123 }
124
125 new_sitename = sitename_fetch(talloc_tos(), realm);
126
127 if (sitename && new_sitename && !strequal(sitename, new_sitename)) {
128 ret = True;
129 } else if ((sitename && !new_sitename) ||
130 (!sitename && new_sitename)) {
131 ret = True;
132 }
133 TALLOC_FREE(new_sitename);
134 return ret;
135}
136
Note: See TracBrowser for help on using the repository browser.