diff options
author | Ken Raeburn <raeburn@mit.edu> | 1999-10-22 21:48:44 +0000 |
---|---|---|
committer | Ken Raeburn <raeburn@mit.edu> | 1999-10-22 21:48:44 +0000 |
commit | 9620779cb3f3b29e75bfb8c4d8b8010873f98bd1 (patch) | |
tree | a724f96c6ab8d1408475118691468eeb971ee094 | |
parent | f3388e060315d8c17f74049191eaf26768d090de (diff) | |
download | krb5-9620779cb3f3b29e75bfb8c4d8b8010873f98bd1.zip krb5-9620779cb3f3b29e75bfb8c4d8b8010873f98bd1.tar.gz krb5-9620779cb3f3b29e75bfb8c4d8b8010873f98bd1.tar.bz2 |
changepw.c (krb5_change_password): Wait only two minutes, not indefinitely, for a response from the kpasswd server
git-svn-id: svn://anonsvn.mit.edu/krb5/branches/krb5-1-1@11870 dc483132-0cff-0310-8789-dd5450dbe970
-rw-r--r-- | src/lib/krb5/os/ChangeLog | 5 | ||||
-rw-r--r-- | src/lib/krb5/os/changepw.c | 37 |
2 files changed, 42 insertions, 0 deletions
diff --git a/src/lib/krb5/os/ChangeLog b/src/lib/krb5/os/ChangeLog index f994cca..49d4043 100644 --- a/src/lib/krb5/os/ChangeLog +++ b/src/lib/krb5/os/ChangeLog @@ -1,3 +1,8 @@ +1999-10-22 Ken Raeburn <raeburn@mit.edu> + + * changepw.c (krb5_change_password): Wait only two minutes, not + indefinitely, for a response from the kpasswd server. + 1999-09-21 Ken Raeburn <raeburn@mit.edu> * changepw.c: Changes from Jeffrey Altman to look up kpasswd diff --git a/src/lib/krb5/os/changepw.c b/src/lib/krb5/os/changepw.c index 26daedd..3355538 100644 --- a/src/lib/krb5/os/changepw.c +++ b/src/lib/krb5/os/changepw.c @@ -198,6 +198,9 @@ krb5_change_password(context, creds, newpw, result_code, for (i=0; i<naddr_p; i++) { + fd_set fdset; + struct timeval timeout; + if (connect(s2, &addr_p[i], sizeof(addr_p[i])) == SOCKET_ERROR) { if ((SOCKET_ERRNO == ECONNREFUSED) || (SOCKET_ERRNO == EHOSTUNREACH)) @@ -298,6 +301,21 @@ krb5_change_password(context, creds, newpw, result_code, chpw_rep.data = (char *) malloc(chpw_rep.length); /* XXX need a timeout/retry loop here */ + FD_ZERO (&fdset); + FD_SET (s1, &fdset); + timeout.tv_sec = 120; + timeout.tv_usec = 0; + switch (select (s1 + 1, &fdset, 0, 0, &timeout)) { + case -1: + code = SOCKET_ERRNO; + goto cleanup; + case 0: + code = ETIMEDOUT; + goto cleanup; + default: + /* fall through */ + ; + } /* "recv" would be good enough here... except that Windows/NT commits the atrocity of returning -1 to indicate failure, @@ -576,6 +594,9 @@ krb5_change_password(context, creds, newpw, result_code, for (i=0; i<out; i++) { + fd_set fdset; + struct timeval timeout; + if (connect(s2, &addr_p[i], sizeof(addr_p[i])) == SOCKET_ERROR) { if ((SOCKET_ERRNO == ECONNREFUSED) || (SOCKET_ERRNO == EHOSTUNREACH)) @@ -677,6 +698,22 @@ krb5_change_password(context, creds, newpw, result_code, /* XXX need a timeout/retry loop here */ + FD_ZERO (&fdset); + FD_SET (s1, &fdset); + timeout.tv_sec = 120; + timeout.tv_usec = 0; + switch (select (s1 + 1, &fdset, 0, 0, &timeout)) { + case -1: + code = SOCKET_ERRNO; + goto cleanup; + case 0: + code = ETIMEDOUT; + goto cleanup; + default: + /* fall through */ + ; + } + /* "recv" would be good enough here... except that Windows/NT commits the atrocity of returning -1 to indicate failure, but leaving errno set to 0. |