(_kadm5_c_init_context): handle getting back port number from admin

host
(kadm5_c_init_with_context): remove `proto/' part before doing
getaddrinfo()


git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@7639 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Assar Westerlund
1999-12-20 14:05:49 +00:00
parent c0f75ccf28
commit ff5c821bf1

View File

@@ -63,6 +63,7 @@ _kadm5_c_init_context(kadm5_client_context **ctx,
krb5_context context) krb5_context context)
{ {
krb5_error_code ret; krb5_error_code ret;
char *colon;
*ctx = malloc(sizeof(**ctx)); *ctx = malloc(sizeof(**ctx));
if(*ctx == NULL) if(*ctx == NULL)
@@ -75,11 +76,6 @@ _kadm5_c_init_context(kadm5_client_context **ctx,
(*ctx)->realm = strdup(params->realm); (*ctx)->realm = strdup(params->realm);
else else
krb5_get_default_realm((*ctx)->context, &(*ctx)->realm); krb5_get_default_realm((*ctx)->context, &(*ctx)->realm);
if(params->mask & KADM5_CONFIG_KADMIND_PORT)
(*ctx)->kadmind_port = params->kadmind_port;
else
(*ctx)->kadmind_port = krb5_getportbyname (context, "kerberos-adm",
"tcp", 749);
if(params->mask & KADM5_CONFIG_ADMIN_SERVER) if(params->mask & KADM5_CONFIG_ADMIN_SERVER)
(*ctx)->admin_server = strdup(params->admin_server); (*ctx)->admin_server = strdup(params->admin_server);
else { else {
@@ -91,9 +87,25 @@ _kadm5_c_init_context(kadm5_client_context **ctx,
(*ctx)->admin_server = strdup(*hostlist); (*ctx)->admin_server = strdup(*hostlist);
krb5_free_krbhst (context, hostlist); krb5_free_krbhst (context, hostlist);
} }
if ((*ctx)->admin_server == NULL) if ((*ctx)->admin_server == NULL)
return ENOMEM; return ENOMEM;
colon = strchr ((*ctx)->admin_server, ':');
if (colon != NULL)
*colon++ = '\0';
(*ctx)->kadmind_port = 0;
if(params->mask & KADM5_CONFIG_KADMIND_PORT)
(*ctx)->kadmind_port = params->kadmind_port;
else if (colon != NULL) {
char *end;
(*ctx)->kadmind_port = htons(strtol (colon, &end, 0));
}
if ((*ctx)->kadmind_port == 0)
(*ctx)->kadmind_port = krb5_getportbyname (context, "kerberos-adm",
"tcp", 749);
return 0; return 0;
} }
@@ -295,6 +307,7 @@ kadm5_c_init_with_context(krb5_context context,
struct addrinfo hints; struct addrinfo hints;
int error; int error;
char portstr[NI_MAXSERV]; char portstr[NI_MAXSERV];
char *hostname, *slash;
memset (&hints, 0, sizeof(hints)); memset (&hints, 0, sizeof(hints));
hints.ai_socktype = SOCK_STREAM; hints.ai_socktype = SOCK_STREAM;
@@ -306,8 +319,12 @@ kadm5_c_init_with_context(krb5_context context,
snprintf (portstr, sizeof(portstr), "%u", ntohs(ctx->kadmind_port)); snprintf (portstr, sizeof(portstr), "%u", ntohs(ctx->kadmind_port));
error = getaddrinfo (ctx->admin_server, portstr, hostname = ctx->admin_server;
&hints, &ai); slash = strchr (hostname, '/');
if (slash != NULL)
hostname = slash + 1;
error = getaddrinfo (hostname, portstr, &hints, &ai);
if (error) if (error)
return KADM5_BAD_SERVER_NAME; return KADM5_BAD_SERVER_NAME;
@@ -316,7 +333,7 @@ kadm5_c_init_with_context(krb5_context context,
if (s < 0) if (s < 0)
continue; continue;
if (connect (s, a->ai_addr, a->ai_addrlen) < 0) { if (connect (s, a->ai_addr, a->ai_addrlen) < 0) {
krb5_warn (context, errno, "connect(%s)", ctx->admin_server); krb5_warn (context, errno, "connect(%s)", hostname);
close (s); close (s);
continue; continue;
} }
@@ -324,7 +341,7 @@ kadm5_c_init_with_context(krb5_context context,
} }
if (a == NULL) { if (a == NULL) {
freeaddrinfo (ai); freeaddrinfo (ai);
krb5_warnx (context, "failed to contact %s", ctx->admin_server); krb5_warnx (context, "failed to contact %s", hostname);
return KADM5_FAILURE; return KADM5_FAILURE;
} }
ret = get_cred_cache(context, client_name, service_name, ret = get_cred_cache(context, client_name, service_name,