summaryrefslogtreecommitdiffstats
path: root/src/lib
diff options
context:
space:
mode:
authorKeith Vetter <keithv@fusion.com>1995-04-06 03:49:47 +0000
committerKeith Vetter <keithv@fusion.com>1995-04-06 03:49:47 +0000
commit8ae426aca4d7f95de05ec34a9e0dfe5cc70395a3 (patch)
treea32c3f23c5ac1aef1e9fc8230b92c344d563edda /src/lib
parent1d06f0e29f9041438a30c0a09911d911fdf1e1f5 (diff)
downloadkrb5-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/ChangeLog4
-rw-r--r--src/lib/krb5/error_tables/ChangeLog5
-rw-r--r--src/lib/krb5/error_tables/krb5_err.et1
-rw-r--r--src/lib/krb5/os/ChangeLog10
-rw-r--r--src/lib/krb5/os/get_krbhst.c8
-rw-r--r--src/lib/krb5/os/locate_kdc.c60
-rw-r--r--src/lib/krb5/os/sendto_kdc.c9
-rw-r--r--src/lib/libkrb5.def1
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