Silence gcc longjmp warnings:
authorKen Raeburn <raeburn@mit.edu>
Fri, 22 Oct 1999 22:17:35 +0000 (22:17 +0000)
committerKen Raeburn <raeburn@mit.edu>
Fri, 22 Oct 1999 22:17:35 +0000 (22:17 +0000)
* prompter.c (krb5_prompter_posix): Make ointrfunc, fd, and errcode volatile.
* promptusr.c (krb5_os_get_tty_uio): Make ointrfunc and retval volatile.
* read_pwd.c (krb5_read_password): Make ointrfunc volatile.  Fix volatile decl
for readin_string (pointer is volatile, doesn't point to volatile).

* 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/trunk@11873 dc483132-0cff-0310-8789-dd5450dbe970

src/lib/krb5/os/ChangeLog
src/lib/krb5/os/changepw.c
src/lib/krb5/os/prompter.c
src/lib/krb5/os/promptusr.c
src/lib/krb5/os/read_pwd.c

index 0f4d8c3e8784de4989575fb29f3e0321e121a818..463e7da747b7138b0e0f1ccd8ff96eab97639321 100644 (file)
@@ -1,3 +1,16 @@
+1999-10-22  Ken Raeburn  <raeburn@mit.edu>
+
+       * prompter.c (krb5_prompter_posix): Make ointrfunc, fd, and
+       errcode volatile.
+       * promptusr.c (krb5_os_get_tty_uio): Make ointrfunc and retval
+       volatile.
+       * read_pwd.c (krb5_read_password): Make ointrfunc volatile.  Fix
+       volatile decl for readin_string (pointer is volatile, doesn't
+       point to volatile).
+
+       * changepw.c (krb5_change_password): Wait only two minutes, not
+       indefinitely, for a response from the kpasswd server.
+
 1999-10-18  Ken Raeburn  <raeburn@mit.edu>
 
        * localaddr.c (krb5_os_localaddr): Don't bother trying to create
index 8a577c2222bcbddd4874826ab710b7466b451b4a..c8120f27671a2629a98c8c423f8e0567a9e5baae 100644 (file)
@@ -188,6 +188,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))
@@ -288,6 +291,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,
index b43e0ae0e16d838c611e63de3911e4b34deb4e2e..800377f78cc6bc54dd9249ef645e104cd2341513 100644 (file)
@@ -34,12 +34,12 @@ krb5_prompter_posix(krb5_context context,
 
     register char *ptr;
     int scratchchar;
-    krb5_sigtype (*ointrfunc)();
-    krb5_error_code errcode;
+    krb5_sigtype (*volatile ointrfunc)();
+    volatile krb5_error_code errcode;
     int i;
 #ifndef ECHO_PASSWORD
     struct termios echo_control, save_control;
-    int fd;
+    volatile int fd;
 #endif
 
     if (name) {
index c38ecc927cede2642325d8326eb3ee45e6fda252..3ac3d4f08f1d9cd4621dd8210395cdde56aa4d7c 100644 (file)
@@ -41,8 +41,8 @@ krb5_os_get_tty_uio(context, uio)
     krb5_context       context;
     krb5_uio           uio;
 {
-    krb5_error_code    retval;
-    krb5_sigtype       (*ointrfunc)();
+    volatile krb5_error_code   retval;
+    krb5_sigtype       (*volatile ointrfunc)();
     krb5_uio           p;
     struct termios     echo_control, save_control;
     int                fd;
index 4deabe2fd23290f1bb67f823c5d93ac8dfc148b9..4adee3dc4f45569ca368700fbcd47af6c364776d 100644 (file)
@@ -60,10 +60,10 @@ krb5_read_password(context, prompt, prompt2, return_pwd, size_return)
 {
     /* adapted from Kerberos v4 des/read_password.c */
     /* readin_string is used after a longjmp, so must be volatile */
-    volatile char *readin_string = 0;
+    char *volatile readin_string = 0;
     register char *ptr;
     int scratchchar;
-    krb5_sigtype (*ointrfunc)();
+    krb5_sigtype (*volatile ointrfunc)();
     krb5_error_code errcode;
 #ifndef ECHO_PASSWORD
     struct termios echo_control, save_control;