(_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:
@@ -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,
|
||||||
|
Reference in New Issue
Block a user