Check in all of jik's patches besides the forward command
authorSam Hartman <hartmans@mit.edu>
Sat, 21 Sep 1996 09:27:45 +0000 (09:27 +0000)
committerSam Hartman <hartmans@mit.edu>
Sat, 21 Sep 1996 09:27:45 +0000 (09:27 +0000)
and init stanza.

I think that as a low-priority fix, someone should rewrite the posix_signals
stuff in sys_bsd.c to be more consistent with the rest of the code;
it is correct but in a different style.

git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@9102 dc483132-0cff-0310-8789-dd5450dbe970

src/appl/telnet/telnet/ChangeLog
src/appl/telnet/telnet/commands.c
src/appl/telnet/telnet/externs.h
src/appl/telnet/telnet/sys_bsd.c
src/appl/telnet/telnet/telnet.c
src/appl/telnet/telnetd/ChangeLog
src/appl/telnet/telnetd/utility.c

index 78a4d41bbfe66912201482835dfcf248193a7587..91cbb7d57a878690988862b34bb02d92126d252c 100644 (file)
@@ -1,3 +1,15 @@
+Sat Sep 21 03:47:46 1996  Sam Hartman  <hartmans@mit.edu>
+
+       * telnet.c (telnet): Only support XDISPLOC if DISPLAY is supported, thanks to jik.
+
+       * commands.c (tn): Save away arguments before memory used by other
+       functions.  Patch thanks to jik.
+       (env_init): Cannonify DISPLAY; patch thanks to jik.
+
+       * sys_bsd.c: Use POSIX_SIGNALS when available.  This patch is
+       contribued by jik.  It could be cleaned up a bit to be more
+       consistent with Kerberos style, but is functionally correct.
+
 Tue Sep 10 14:09:49 1996  Tom Yu  <tlyu@mit.edu>
 
        * telnet.1: remove ".so man1/header.doc"
index dd00a7498c8aae98543e358b7e9413f9b2501011..52209d319cbb78173726975e9753ae5f4c48ba4d 100644 (file)
@@ -1872,6 +1872,17 @@ env_getvalue(var)
        return(NULL);
 }
 
+       int
+env_is_exported(var)
+       unsigned char *var;
+{
+       register struct env_lst *ep;
+
+       if ((ep = env_find(var)))
+               return ep->export;
+       return 0;
+}
+           
 #if defined(OLD_ENVIRON) && defined(ENV_HACK)
        void
 env_varval(what)
@@ -2436,7 +2447,13 @@ tn(argc, argv)
        auth_encrypt_connect(connected);
 #endif /* defined(AUTHENTICATION) || defined(ENCRYPTION) */
     } while (connected == 0);
+    if (user)
+      user = strdup(user);
+    if (hostp)
+      hostp = strdup(hostp);
     cmdrc(hostp, hostname);
+    if (hostp)
+      free(hostp);
     if (autologin && user == NULL) {
        struct passwd *pw;
 
@@ -2448,6 +2465,8 @@ tn(argc, argv)
                else
                        user = NULL;
        }
+       if (user)
+         user = strdup(user);
     }
     if (user) {
        env_define((unsigned char *)"USER", (unsigned char *)user);
@@ -2456,6 +2475,8 @@ tn(argc, argv)
     (void) call(status, "status", "notmuch", 0);
     if (setjmp(peerdied) == 0)
        telnet(user);
+    if (user)
+      free(user);
     (void) NetClose(net);
     ExitString("Connection closed by foreign host.\r\n",1);
     /*NOTREACHED*/
index fae1d5d2e69c4079083c6d8266b186d58a0a342a..40f5e493562827f9af345220fc4dc3c4328b9b9b 100644 (file)
@@ -313,6 +313,9 @@ extern unsigned char
     *env_default P((int, int)),
     *env_getvalue P((unsigned char *));
 
+extern int
+    env_is_exported P((unsigned char *));
+
 extern int
     get_status P((void)),
     dosynch P((void));
index 2e52986f0e609e16a8f0d23acbbdd1617d533795..dbbb9078e5eac5100bad07bb9908eff7d2cee655 100644 (file)
@@ -47,6 +47,9 @@
 #include <sys/select.h>
 #endif
 #include <signal.h>
+#ifdef POSIX_SIGNALS
+#include <unistd.h>
+#endif /* POSIX_SIGNALS */
 #include <errno.h>
 #include <arpa/telnet.h>
 
 extern SIG_FUNC_RET ayt_status();
 #endif
 
+#ifdef POSIX_SIGNALS
+static struct sigaction new_sa_rec, old_sa_rec;
+
+#ifdef SA_INTERRUPT
+#define SIGACTION_INTERRUPT SA_INTERRUPT
+#else
+#define SIGACTION_INTERRUPT 0
+#endif
+
+#ifdef SA_NOMASK
+#define SIGACTION_NOMASK SA_NOMASK
+#else
+#define SIGACTION_NOMASK 0
+#endif
+
+#define signal(sig, func) ((new_sa_rec.sa_handler = func), \
+                          sigemptyset(&new_sa_rec.sa_mask), \
+                          (new_sa_rec.sa_flags = SIGACTION_INTERRUPT | \
+                           SIGACTION_NOMASK), \
+                          sigaction(sig, &new_sa_rec, &old_sa_rec), \
+                          old_sa_rec.sa_handler)
+
+#endif /* POSIX_SIGNALS */
+
 int
        tout,                   /* Output file descriptor */
        tin,                    /* Input file descriptor */
index bb26be6045bb035edddc630c44bbcc3c1704ffae..e89f50629a2e58960569121c94efd99d37d7f0f8 100644 (file)
@@ -521,7 +521,8 @@ dooption(option)
 #endif
 
            case TELOPT_XDISPLOC:       /* X Display location */
-               if (env_getvalue((unsigned char *)"DISPLAY"))
+               if (env_getvalue((unsigned char *)"DISPLAY") &&
+                   env_is_exported((unsigned char *)"DISPLAY"))
                    new_state_ok = 1;
                break;
 
@@ -954,7 +955,8 @@ suboption()
            unsigned char temp[50], *dp;
            int len;
 
-           if ((dp = env_getvalue((unsigned char *)"DISPLAY")) == NULL) {
+           if (((dp = env_getvalue((unsigned char *)"DISPLAY")) == NULL) ||
+               (! env_is_exported((unsigned char *)"DISPLAY"))) {
                /*
                 * Something happened, we no longer have a DISPLAY
                 * variable.  So, turn off the option.
@@ -2286,7 +2288,8 @@ telnet(user)
        send_will(TELOPT_LINEMODE, 1);
        send_will(TELOPT_NEW_ENVIRON, 1);
        send_do(TELOPT_STATUS, 1);
-       if (env_getvalue((unsigned char *)"DISPLAY"))
+       if (env_getvalue((unsigned char *)"DISPLAY") &&
+           env_is_exported((unsigned char *)"DISPLAY"))
            send_will(TELOPT_XDISPLOC, 1);
        if (eight)
            tel_enter_binary(eight);
index 98f5ceb8ba8c5a8e5c4c685a0c0b84611c519462..f18486b2fed833db02abaf37b552bdc737f21c03 100644 (file)
@@ -1,3 +1,7 @@
+Sat Sep 21 03:38:31 1996  Sam Hartman  <hartmans@mit.edu>
+
+       * utility.c (ttloop): Continue on eintr.
+
 Tue Sep 10 14:10:41 1996  Tom Yu  <tlyu@mit.edu>
 
        * telnetd.8: remove ".so man1/header.doc"
index 54d42d296e2cd7b0558c9db42dc908fa38e5efce..7b72e80a5ae073bf0cfe33df78646a5e1ccac0f6 100644 (file)
@@ -59,8 +59,11 @@ ttloop()
     if (nfrontp-nbackp) {
        netflush();
     }
+read_again:
     ncc = read(net, netibuf, sizeof netibuf);
     if (ncc < 0) {
+       if (errno == EINTR)
+           goto read_again;
        syslog(LOG_INFO, "ttloop:  read: %m");
        exit(1);
     } else if (ncc == 0) {