diff options
| author | Greg Hudson <ghudson@mit.edu> | 2013-01-11 13:26:37 -0500 |
|---|---|---|
| committer | Greg Hudson <ghudson@mit.edu> | 2013-01-11 13:36:20 -0500 |
| commit | c53ea7bef444d7c151c46224b7a0600b9539496f (patch) | |
| tree | 3656a64e4b36945f174d145e9f2cbac84ca11d44 /src/lib | |
| parent | 59ff1102942b564faa257c9f283efeb6fea63b8f (diff) | |
| download | krb5-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.h | 4 | ||||
| -rw-r--r-- | src/lib/kadm5/alt_prof.c | 57 | ||||
| -rw-r--r-- | src/lib/kadm5/srv/libkadm5srv_mit.exports | 1 |
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 |
