2
2
* lib/krb5/os/def_realm.c
4
* Copyright 1990,1991 by the Massachusetts Institute of Technology.
4
* Copyright 1990,1991,2009 by the Massachusetts Institute of Technology.
5
5
* All Rights Reserved.
7
7
* Export of this software from the United States of America may
86
85
context->default_realm = 0;
87
86
if (context->profile != 0) {
88
retval = profile_get_string(context->profile, "libdefaults",
89
"default_realm", 0, 0,
87
retval = profile_get_string(context->profile, KRB5_CONF_LIBDEFAULTS,
88
KRB5_CONF_DEFAULT_REALM, 0, 0,
92
91
if (!retval && realm) {
93
context->default_realm = malloc(strlen(realm) + 1);
92
context->default_realm = strdup(realm);
94
93
if (!context->default_realm) {
95
94
profile_release_string(realm);
98
strcpy(context->default_realm, realm);
99
97
profile_release_string(realm);
106
104
if (context->default_realm == 0) {
107
105
int use_dns = _krb5_use_dns_realm(context);
110
* Since this didn't appear in our config file, try looking
111
* it up via DNS. Look for a TXT records of the form:
113
* _kerberos.<localhost>
114
* _kerberos.<domainname>
115
* _kerberos.<searchlist>
118
char localhost[MAX_DNS_NAMELEN+1];
121
krb5int_get_fq_local_hostname (localhost, sizeof(localhost));
123
if ( localhost[0] ) {
126
retval = krb5_try_realm_txt_rr("_kerberos", p,
127
&context->default_realm);
131
} while (retval && p && p[0]);
134
retval = krb5_try_realm_txt_rr("_kerberos", "",
135
&context->default_realm);
137
retval = krb5_try_realm_txt_rr("_kerberos", "",
138
&context->default_realm);
141
return(KRB5_CONFIG_NODEFREALM);
108
* Since this didn't appear in our config file, try looking
109
* it up via DNS. Look for a TXT records of the form:
111
* _kerberos.<localhost>
112
* _kerberos.<domainname>
113
* _kerberos.<searchlist>
116
char localhost[MAX_DNS_NAMELEN+1];
119
krb5int_get_fq_local_hostname (localhost, sizeof(localhost));
121
if ( localhost[0] ) {
124
retval = krb5_try_realm_txt_rr("_kerberos", p,
125
&context->default_realm);
129
} while (retval && p && p[0]);
132
retval = krb5_try_realm_txt_rr("_kerberos", "",
133
&context->default_realm);
135
retval = krb5_try_realm_txt_rr("_kerberos", "",
136
&context->default_realm);
139
return(KRB5_CONFIG_NODEFREALM);
145
143
#endif /* KRB5_DNS_LOOKUP */
148
146
if (context->default_realm == 0)
149
return(KRB5_CONFIG_NODEFREALM);
147
return(KRB5_CONFIG_NODEFREALM);
150
148
if (context->default_realm[0] == 0) {
151
149
free (context->default_realm);
152
150
context->default_realm = 0;
165
162
krb5_set_default_realm(krb5_context context, const char *lrealm)
167
164
if (!context || (context->magic != KV5M_CONTEXT))
170
167
if (context->default_realm) {
171
free(context->default_realm);
172
context->default_realm = 0;
168
free(context->default_realm);
169
context->default_realm = 0;
175
172
/* Allow the user to clear the default realm setting by passing in
177
174
if (!lrealm) return 0;
179
context->default_realm = malloc(strlen (lrealm) + 1);
176
context->default_realm = strdup(lrealm);
181
178
if (!context->default_realm)
184
strcpy(context->default_realm, lrealm);
189
185
void KRB5_CALLCONV
190
186
krb5_free_default_realm(krb5_context context, char *lrealm)
192
krb5int_get_domain_realm_mapping(krb5_context context, const char *host, char ***realmsp)
195
char *realm, *cp, *temp_realm;
196
krb5_error_code retval;
197
char temp_host[MAX_DNS_NAMELEN+1];
199
/* do sanity check and lower-case */
200
retval = krb5int_clean_hostname(context, host, temp_host, sizeof temp_host);
204
Search for the best match for the host or domain.
205
Example: Given a host a.b.c.d, try to match on:
206
1) a.b.c.d 2) .b.c.d. 3) b.c.d 4) .c.d 5) c.d 6) .d 7) d
210
realm = (char *)NULL;
213
retval = profile_get_string(context->profile, KRB5_CONF_DOMAIN_REALM, cp,
214
0, (char *)NULL, &temp_realm);
217
if (temp_realm != (char *)NULL)
218
break; /* Match found */
220
/* Setup for another test */
224
cp = strchr(cp, '.');
227
if (temp_realm != (char*)NULL) {
228
realm = strdup(temp_realm);
229
profile_release_string(temp_realm);
234
retrealms = (char **)calloc(2, sizeof(*retrealms));
236
if (realm != (char *)NULL)
241
retrealms[0] = realm;
244
*realmsp = retrealms;