diff options
| author | Keith Vetter <keithv@fusion.com> | 1995-04-06 03:49:47 +0000 |
|---|---|---|
| committer | Keith Vetter <keithv@fusion.com> | 1995-04-06 03:49:47 +0000 |
| commit | 8ae426aca4d7f95de05ec34a9e0dfe5cc70395a3 (patch) | |
| tree | a32c3f23c5ac1aef1e9fc8230b92c344d563edda /src/lib | |
| parent | 1d06f0e29f9041438a30c0a09911d911fdf1e1f5 (diff) | |
| download | krb5-8ae426aca4d7f95de05ec34a9e0dfe5cc70395a3.tar.gz krb5-8ae426aca4d7f95de05ec34a9e0dfe5cc70395a3.tar.xz krb5-8ae426aca4d7f95de05ec34a9e0dfe5cc70395a3.zip | |
Bug fixes or better error handling for the following 4 Windows bugs
(note, these changes haven't yet been tested on the PC which were
failing so no guarantee that they fully work):
a) GUI to cns improved so that you don't need a resize for the widgets to
align properly, and so the interaction of typing: "username cr password
cr" is all you need to do to get you a ticket.
b) cns uses krb5_us_gettimeofday instead of krb5_timeofday because the
former is more accurate and handles timezones. Probably should make
the latter just call the former.
c) Added SOCKET_INIT and SOCKET_DESTROY around krb5_sendto_kdc to prevent
some tcp/ip stacks from locking up after 8 uses.
d) Added a new error message and better error handling to give more
precision as to why one PC was getting the error 'Cannot find KDC
for requested realm.'
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@5342 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/ChangeLog | 4 | ||||
| -rw-r--r-- | src/lib/krb5/error_tables/ChangeLog | 5 | ||||
| -rw-r--r-- | src/lib/krb5/error_tables/krb5_err.et | 1 | ||||
| -rw-r--r-- | src/lib/krb5/os/ChangeLog | 10 | ||||
| -rw-r--r-- | src/lib/krb5/os/get_krbhst.c | 8 | ||||
| -rw-r--r-- | src/lib/krb5/os/locate_kdc.c | 60 | ||||
| -rw-r--r-- | src/lib/krb5/os/sendto_kdc.c | 9 | ||||
| -rw-r--r-- | src/lib/libkrb5.def | 1 |
8 files changed, 66 insertions, 32 deletions
diff --git a/src/lib/ChangeLog b/src/lib/ChangeLog index 6dd26c2a6..5bb0712bb 100644 --- a/src/lib/ChangeLog +++ b/src/lib/ChangeLog @@ -1,3 +1,7 @@ +Wed Apr 5 16:27:53 1995 Keith Vetter (keithv@fusion.com) + + * libkrb5.def: added krb5_us_timeofday to export list + Fri Mar 31 16:15:59 1995 Theodore Y. Ts'o (tytso@dcl) * Makefile.in, configure.in: Move the dependency which causes diff --git a/src/lib/krb5/error_tables/ChangeLog b/src/lib/krb5/error_tables/ChangeLog index 49562dc95..8938b0daa 100644 --- a/src/lib/krb5/error_tables/ChangeLog +++ b/src/lib/krb5/error_tables/ChangeLog @@ -1,3 +1,8 @@ +Wed Apr 5 16:29:25 1995 Keith Vetter (keithv@fusion.com) + + * krb5_err.et: added KRB5_REALM_CANT_RESOLVE for more precise + handling of not finding KDC. + Fri Mar 31 16:06:21 1995 Theodore Y. Ts'o (tytso@dcl) * Makefile.in (BUILDTOP2, etc): Back out previous change so that diff --git a/src/lib/krb5/error_tables/krb5_err.et b/src/lib/krb5/error_tables/krb5_err.et index 9e7b3a15c..1be16712f 100644 --- a/src/lib/krb5/error_tables/krb5_err.et +++ b/src/lib/krb5/error_tables/krb5_err.et @@ -290,4 +290,5 @@ error_code KRB5_ERR_HOST_REALM_UNKNOWN, "Cannot determine realm for host" error_code KRB5_SNAME_UNSUPP_NAMETYPE, "Conversion to service principal undefined for name type" error_code KRB5KRB_AP_ERR_V4_REPLY, "Initial Ticket response appears to be Version 4 error" +error_code KRB5_REALM_CANT_RESOLVE, "Cannot resolve KDC for requested realm" end diff --git a/src/lib/krb5/os/ChangeLog b/src/lib/krb5/os/ChangeLog index 0571ee818..58e9fe645 100644 --- a/src/lib/krb5/os/ChangeLog +++ b/src/lib/krb5/os/ChangeLog @@ -1,3 +1,13 @@ +Wed Apr 5 16:32:07 1995 Keith Vetter (keithv@fusion.com) + + * get_krbh.c: better error handling--old return values were + being overwritten. + * locate_kdc.c: added new error code KRB5_REALM_CANT_RESOLVE for + when we have realm names but can't find their addresses. + Also, fixed up indenting of an if clause. + * sendto_kdc.c: added winsock init/destroy calls because some + PC tcp/ip stacks seem to need it. + Fri Mar 31 16:30:03 1995 Theodore Y. Ts'o (tytso@dcl) * realm_dom.c (krb5_get_realm_domain): Don't indent #ifdef's! diff --git a/src/lib/krb5/os/get_krbhst.c b/src/lib/krb5/os/get_krbhst.c index 0a02a3805..d41b80a37 100644 --- a/src/lib/krb5/os/get_krbhst.c +++ b/src/lib/krb5/os/get_krbhst.c @@ -85,7 +85,10 @@ krb5_get_krbhst(context, realm, hostlist) else { retval = 0; rethlist = (char **)calloc(hlsize, sizeof (*rethlist)); - for (;;) { + if (rethlist == NULL) + retval = ENOMEM; + + while (retval == 0) { if (fgets(filebuf, sizeof(filebuf), config_file) == NULL) break; if (strncmp(filebuf, realm->data, realm->length)) @@ -144,7 +147,8 @@ krb5_get_krbhst(context, realm, hostlist) if (hlindex == 0) { krb5_xfree(rethlist); rethlist = 0; - retval = KRB5_REALM_UNKNOWN; + if (retval == 0) + retval = KRB5_REALM_UNKNOWN; } *hostlist = rethlist; diff --git a/src/lib/krb5/os/locate_kdc.c b/src/lib/krb5/os/locate_kdc.c index e9ef69b09..61abc2cef 100644 --- a/src/lib/krb5/os/locate_kdc.c +++ b/src/lib/krb5/os/locate_kdc.c @@ -97,33 +97,34 @@ krb5_locate_kdc(context, realm, addr_pp, naddrs) switch (hp->h_addrtype) { #ifdef KRB5_USE_INET case AF_INET: - if (udpport) /* must have gotten a port # */ - for (j=0; hp->h_addr_list[j]; j++) { - sin_p = (struct sockaddr_in *) &addr_p[out++]; - memset ((char *)sin_p, 0, sizeof(struct sockaddr)); - sin_p->sin_family = hp->h_addrtype; - sin_p->sin_port = udpport; - memcpy((char *)&sin_p->sin_addr, - (char *)hp->h_addr_list[j], - sizeof(struct in_addr)); - if (out >= count) { - count *= 2; - addr_p = (struct sockaddr *) - realloc ((char *)addr_p, - sizeof(struct sockaddr) * count); - } - if (sec_udpport) { - addr_p[out] = addr_p[out-1]; - sin_p = (struct sockaddr_in *) &addr_p[out++]; - sin_p->sin_port = sec_udpport; - if (out >= count) { + if (udpport) { /* must have gotten a port # */ + for (j=0; hp->h_addr_list[j]; j++) { + sin_p = (struct sockaddr_in *) &addr_p[out++]; + memset ((char *)sin_p, 0, sizeof(struct sockaddr)); + sin_p->sin_family = hp->h_addrtype; + sin_p->sin_port = udpport; + memcpy((char *)&sin_p->sin_addr, + (char *)hp->h_addr_list[j], + sizeof(struct in_addr)); + if (out >= count) { count *= 2; addr_p = (struct sockaddr *) - realloc ((char *)addr_p, - sizeof(struct sockaddr) * count); - } + realloc ((char *)addr_p, + sizeof(struct sockaddr) * count); + } + if (sec_udpport) { + addr_p[out] = addr_p[out-1]; + sin_p = (struct sockaddr_in *) &addr_p[out++]; + sin_p->sin_port = sec_udpport; + if (out >= count) { + count *= 2; + addr_p = (struct sockaddr *) + realloc ((char *)addr_p, + sizeof(struct sockaddr) * count); + } + } } - } + } break; #endif default: @@ -134,11 +135,12 @@ krb5_locate_kdc(context, realm, addr_pp, naddrs) hostlist[i] = 0; } free ((char *)hostlist); - /* - * XXX need to distinguish between - * "can't resolve KDC name" and - * "can't find any KDC names" - */ + + if (out == 0) { /* Couldn't resolve any KDC names */ + free (addr_p); + return KRB5_REALM_CANT_RESOLVE; + } + *addr_pp = addr_p; *naddrs = out; return 0; diff --git a/src/lib/krb5/os/sendto_kdc.c b/src/lib/krb5/os/sendto_kdc.c index 0a534b356..f4fffee9b 100644 --- a/src/lib/krb5/os/sendto_kdc.c +++ b/src/lib/krb5/os/sendto_kdc.c @@ -85,7 +85,6 @@ krb5_sendto_kdc (context, message, realm, reply) socklist = (SOCKET *)malloc(naddr * sizeof(SOCKET)); if (socklist == NULL) { krb5_xfree(addr); - krb5_xfree(socklist); return ENOMEM; } for (i = 0; i < naddr; i++) @@ -98,6 +97,13 @@ krb5_sendto_kdc (context, message, realm, reply) } reply->length = krb5_max_dgram_size; + if (SOCKET_INITIALIZE()) { /* PC needs this for some tcp/ip stacks */ + krb5_xfree(addr); + krb5_xfree(socklist); + free(reply->data); + return SOCKET_ERRNO; + } + /* * do exponential backoff. */ @@ -197,6 +203,7 @@ krb5_sendto_kdc (context, message, realm, reply) } retval = KRB5_KDC_UNREACH; out: + SOCKET_CLEANUP(); /* Done with sockets for now */ for (i = 0; i < naddr; i++) if (socklist[i] != INVALID_SOCKET) (void) closesocket (socklist[i]); diff --git a/src/lib/libkrb5.def b/src/lib/libkrb5.def index 3afbd0c4a..7f668c618 100644 --- a/src/lib/libkrb5.def +++ b/src/lib/libkrb5.def @@ -31,6 +31,7 @@ EXPORTS KRB5_RD_REP KRB5_SNAME_TO_PRINCIPAL KRB5_TIMEOFDAY + KRB5_US_TIMEOFDAY KRB5_UNPARSE_NAME ;Com_err routines _com_err |
