diff --git a/ChangeLog b/ChangeLog index d25bdb49..ae1adff7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2012-08-20 Mats Erik Andersson + + Server realm pairing: Let server name determine + realm to be contacted, as per library configuration. + + * libinetutils/shishi.c (shishi_auth): Whenever realm + is not explicit, call shishi_realm_for_server() to get + a usable realm; pass on to shishi_realm_default_set(). + * libtelnet/shishi.c (krb5shishi_send): Likewise. + 2012-08-17 Mats Erik Andersson telnet: Selectable principal name. diff --git a/libinetutils/shishi.c b/libinetutils/shishi.c index d0230814..98f36629 100644 --- a/libinetutils/shishi.c +++ b/libinetutils/shishi.c @@ -28,7 +28,7 @@ # include # include -/* shishi authentication */ +/* shishi authentication, client side */ int shishi_auth (Shishi ** handle, int verbose, char **cname, const char *sname, int sock, char *cmd, @@ -130,6 +130,19 @@ shishi_auth (Shishi ** handle, int verbose, char **cname, else sprintf (tmpserver, "%s/%s", SERVICE, sname + (p ? 1 : 0)); + /* Retrieve realm assigned to this server as per configuration, + * unless an explicit domain was passed in the call. + */ + if (!realm) + { + if (!p) + p = sname; + else if (*p == '/') + ++p; + + shishi_realm_default_set (h, shishi_realm_for_server (h, p)); + } + hint.client = (char *) *cname; hint.server = (char *) tmpserver; @@ -254,6 +267,7 @@ senderror (int s, char type, char *buf) write (s, buf, strlen (buf)); } +/* shishi authentication, server side */ int get_auth (int infd, Shishi ** handle, Shishi_ap ** ap, Shishi_key ** enckey, const char **err_msg, int *protoversion, diff --git a/libtelnet/shishi.c b/libtelnet/shishi.c index 0ffd6a98..32a59e69 100644 --- a/libtelnet/shishi.c +++ b/libtelnet/shishi.c @@ -186,6 +186,19 @@ krb5shishi_send (TN_Authenticator * ap) if (dest_realm && *dest_realm) shishi_realm_default_set (shishi_handle, dest_realm); + else + { + /* Retrieve realm assigned to this server as per configuration. */ + char *p = strchr (RemoteHostName, '/'); + + if (p) + ++p; + else + p = RemoteHostName; + + shishi_realm_default_set (shishi_handle, + shishi_realm_for_server (shishi_handle, p)); + } tkt = shishi_tkts_get (shishi_tkts_default (shishi_handle), &hint); free (tmp);