summaryrefslogtreecommitdiffstats
path: root/src/lib
diff options
context:
space:
mode:
authorGreg Hudson <ghudson@mit.edu>2013-01-11 13:26:37 -0500
committerGreg Hudson <ghudson@mit.edu>2013-01-11 13:36:20 -0500
commitc53ea7bef444d7c151c46224b7a0600b9539496f (patch)
tree3656a64e4b36945f174d145e9f2cbac84ca11d44 /src/lib
parent59ff1102942b564faa257c9f283efeb6fea63b8f (diff)
downloadkrb5-c53ea7bef444d7c151c46224b7a0600b9539496f.tar.gz
krb5-c53ea7bef444d7c151c46224b7a0600b9539496f.tar.xz
krb5-c53ea7bef444d7c151c46224b7a0600b9539496f.zip
Simplify KDC host referral code
Remove some unnecessary optimizations to reduce code complexity. Get rid of krb5_match_config_pattern in favor of a simpler helper function in do_tgs_req_c. Get rid of KRB5_CONF_ASTERISK and just use "*" instead. Use a helper function to combine [kdcdefaults] and realm subsection values of variables, and don't bother adding leading and trailing spaces. Consistently use the names "hostbased" and "no_referral" to refer to variable values (with a "realm_" prefix for structures which currently use it).
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/kadm5/admin.h4
-rw-r--r--src/lib/kadm5/alt_prof.c57
-rw-r--r--src/lib/kadm5/srv/libkadm5srv_mit.exports1
3 files changed, 13 insertions, 49 deletions
diff --git a/src/lib/kadm5/admin.h b/src/lib/kadm5/admin.h
index fd8d65447..1af7ac278 100644
--- a/src/lib/kadm5/admin.h
+++ b/src/lib/kadm5/admin.h
@@ -294,8 +294,8 @@ typedef struct __krb5_realm_params {
char * realm_kdc_ports;
char * realm_kdc_tcp_ports;
char * realm_acl_file;
- char * realm_host_based_services;
- char * realm_no_host_referral;
+ char * realm_hostbased;
+ char * realm_no_referral;
krb5_int32 realm_kadmind_port;
krb5_enctype realm_enctype;
krb5_deltat realm_max_life;
diff --git a/src/lib/kadm5/alt_prof.c b/src/lib/kadm5/alt_prof.c
index 2a587e422..4b6bf800f 100644
--- a/src/lib/kadm5/alt_prof.c
+++ b/src/lib/kadm5/alt_prof.c
@@ -37,7 +37,6 @@
#include <ctype.h>
#include <kdb_log.h>
-krb5_boolean krb5_match_config_pattern(const char *, const char*);
static krb5_key_salt_tuple *copy_key_salt_tuple(ksalt, len)
krb5_key_salt_tuple *ksalt;
krb5_int32 len;
@@ -938,12 +937,9 @@ krb5_read_realm_params(kcontext, realm, rparamp)
char *kdcprofile = 0;
char *kdcenv = 0;
- char *no_refrls = 0;
- char *host_based_srvcs = 0;
-
-
-
- krb5_error_code kret;
+ char *no_referral = 0;
+ char *hostbased = 0;
+ krb5_error_code kret;
filename = (kdcprofile) ? kdcprofile : DEFAULT_KDC_PROFILE;
envname = (kdcenv) ? kdcenv : KDC_PROFILE_ENV;
@@ -1057,18 +1053,12 @@ krb5_read_realm_params(kcontext, realm, rparamp)
}
hierarchy[2] = KRB5_CONF_NO_HOST_REFERRAL;
- if (!krb5_aprof_get_string_all(aprofile, hierarchy, &no_refrls))
- rparams->realm_no_host_referral = no_refrls;
- else
- no_refrls = 0;
-
- if (!no_refrls || krb5_match_config_pattern(no_refrls, KRB5_CONF_ASTERISK) == FALSE) {
- hierarchy[2] = KRB5_CONF_HOST_BASED_SERVICES;
- if (!krb5_aprof_get_string_all(aprofile, hierarchy, &host_based_srvcs))
- rparams->realm_host_based_services = host_based_srvcs;
- else
- host_based_srvcs = 0;
- }
+ if (!krb5_aprof_get_string_all(aprofile, hierarchy, &no_referral))
+ rparams->realm_no_referral = no_referral;
+
+ hierarchy[2] = KRB5_CONF_HOST_BASED_SERVICES;
+ if (!krb5_aprof_get_string_all(aprofile, hierarchy, &hostbased))
+ rparams->realm_hostbased = hostbased;
/* Get the value for the default principal flags */
hierarchy[2] = KRB5_CONF_DEFAULT_PRINCIPAL_FLAGS;
@@ -1137,34 +1127,9 @@ krb5_free_realm_params(kcontext, rparams)
free(rparams->realm_kdc_ports);
free(rparams->realm_kdc_tcp_ports);
free(rparams->realm_acl_file);
- free(rparams->realm_no_host_referral);
- free(rparams->realm_host_based_services);
+ free(rparams->realm_no_referral);
+ free(rparams->realm_hostbased);
free(rparams);
}
return(0);
}
-/*
- * match_config_pattern -
- * returns TRUE is the pattern is found in the attr's list of values.
- * Otherwise - FALSE.
- * In conf file the values are separates by commas or whitespaces.
- */
-krb5_boolean
-krb5_match_config_pattern(const char *string, const char *pattern)
-{
- const char *ptr;
- char next = '\0';
- int len = strlen(pattern);
-
- for (ptr = strstr(string,pattern); ptr != 0; ptr = strstr(ptr+len,pattern)) {
- if (ptr == string
- || isspace((unsigned char)*(ptr-1))
- || *(ptr-1) ==',') {
- next = *(ptr + len);
- if (next == '\0' || isspace((unsigned char)next) || next ==',') {
- return TRUE;
- }
- }
- }
- return FALSE;
-}
diff --git a/src/lib/kadm5/srv/libkadm5srv_mit.exports b/src/lib/kadm5/srv/libkadm5srv_mit.exports
index 358b9c6ce..0788ac1fe 100644
--- a/src/lib/kadm5/srv/libkadm5srv_mit.exports
+++ b/src/lib/kadm5/srv/libkadm5srv_mit.exports
@@ -80,7 +80,6 @@ krb5_klog_syslog
krb5_read_realm_params
krb5_string_to_flags
krb5_string_to_keysalts
-krb5_match_config_pattern
master_db
master_princ
osa_free_princ_ent