Does anybody still use kterm?

This rips out a lot of ancient cruft that assumed you had to run
setuid root to get a pty with proper permissions.  openpty(3) has
handled this transparently for a long time now.

We still need to be setgid utmp to write, well, utmp(5) entries.

Very cursory testing indicates that tty setup and utmp writing
still work fine.

ok?

Index: Makefile
===================================================================
RCS file: /cvs/ports/japanese/kterm/Makefile,v
retrieving revision 1.34
diff -u -p -r1.34 Makefile
--- Makefile    11 Mar 2013 11:12:33 -0000      1.34
+++ Makefile    1 Jun 2013 02:28:23 -0000
@@ -5,7 +5,7 @@ COMMENT=        Japanese-capable xterm
 VERSION=       6.2.0
 DISTNAME=      kterm-${VERSION}
 PKGNAME=       ja-kterm-${VERSION}
-REVISION=      7
+REVISION=      8
 CATEGORIES=    japanese x11
 
 MASTER_SITES=  ${MASTER_SITE_XCONTRIB:=applications/}
Index: patches/patch-Imakefile
===================================================================
RCS file: /cvs/ports/japanese/kterm/patches/patch-Imakefile,v
retrieving revision 1.1
diff -u -p -r1.1 patch-Imakefile
--- patches/patch-Imakefile     21 Nov 2002 05:41:14 -0000      1.1
+++ patches/patch-Imakefile     1 Jun 2013 02:28:23 -0000
@@ -1,7 +1,7 @@
 $OpenBSD: patch-Imakefile,v 1.1 2002/11/21 05:41:14 pvalchev Exp $
---- Imakefile.orig     Thu Jul 11 23:01:04 1996
-+++ Imakefile  Wed Nov 20 01:10:22 2002
-@@ -24,6 +24,10 @@ XCOMM $Id: Imakefile,v 6.3 1996/07/12 05
+--- Imakefile.orig     Fri Jul 12 01:01:04 1996
++++ Imakefile  Fri May 31 21:51:50 2013
+@@ -24,6 +24,10 @@ XCOMM $Id: Imakefile,v 6.3 1996/07/12 05:01:03 kagotan
           PTYLIB = -lpucc
  #endif
  
Index: patches/patch-main_c
===================================================================
RCS file: /cvs/ports/japanese/kterm/patches/patch-main_c,v
retrieving revision 1.2
diff -u -p -r1.2 patch-main_c
--- patches/patch-main_c        21 Nov 2002 05:41:14 -0000      1.2
+++ patches/patch-main_c        1 Jun 2013 02:28:23 -0000
@@ -1,6 +1,6 @@
 $OpenBSD: patch-main_c,v 1.2 2002/11/21 05:41:14 pvalchev Exp $
---- main.c.orig        Wed Nov 20 00:27:51 2002
-+++ main.c     Wed Nov 20 01:02:33 2002
+--- main.c.orig        Fri May 31 22:15:05 2013
++++ main.c     Fri May 31 22:25:10 2013
 @@ -142,9 +142,16 @@ static Bool IsPts = False;
  #define WTMP
  #endif
@@ -41,18 +41,7 @@ $OpenBSD: patch-main_c,v 1.2 2002/11/21 
  #endif
  #include <sys/resource.h>
  #define HAS_UTMP_UT_HOST
-@@ -236,6 +247,10 @@ static Bool IsPts = False;
- #endif
- #endif        /* } !SYSV */
- 
-+#ifdef USE_TTY_GROUP
-+#include <grp.h>
-+#endif
-+
- #ifdef _POSIX_SOURCE
- #define USE_POSIX_WAIT
- #define HAS_POSIX_SAVED_IDS
-@@ -251,6 +266,8 @@ static Bool IsPts = False;
+@@ -251,6 +262,8 @@ static Bool IsPts = False;
  
  #if (BSD >= 199103)
  #define USE_POSIX_WAIT
@@ -61,7 +50,7 @@ $OpenBSD: patch-main_c,v 1.2 2002/11/21 
  #define HAS_POSIX_SAVED_IDS
  #endif
  
-@@ -301,6 +318,10 @@ extern struct utmp *getutid __((struct u
+@@ -301,6 +314,10 @@ extern struct utmp *getutid __((struct utmp *_Id));
  int   Ptyfd;
  #endif /* PUCC_PTYD */
  
@@ -72,18 +61,7 @@ $OpenBSD: patch-main_c,v 1.2 2002/11/21 
  #ifdef sequent
  #define USE_GET_PSEUDOTTY
  #endif
-@@ -362,6 +383,10 @@ int       Ptyfd;
- #define SIGNAL_RETURN return
- #endif
- 
-+#ifndef TTY_GROUP_NAME
-+#define TTY_GROUP_NAME "tty"
-+#endif
-+
- SIGNAL_T Exit();
- 
- #ifndef X_NOT_POSIX
-@@ -407,6 +432,10 @@ static Bool added_utmp_entry = False;
+@@ -407,6 +424,10 @@ static Bool added_utmp_entry = False;
  
  static Bool xterm_exiting = False;
  
@@ -94,17 +72,7 @@ $OpenBSD: patch-main_c,v 1.2 2002/11/21 
  /*
  ** Ordinarily it should be okay to omit the assignment in the following
  ** statement. Apparently the c89 compiler on AIX 4.1.3 has a bug, or does
-@@ -416,6 +445,9 @@ static Bool xterm_exiting = False;
- */
- static char **command_to_exec = NULL;
- 
-+static int get_pty (int *pty);
-+static void set_owner (char *device, int uid, int gid, int mode);
-+
- #ifdef USE_SYSV_TERMIO
- /* The following structures are initialized in main() in order
- ** to eliminate any assumptions about the internal order of their
-@@ -434,6 +466,9 @@ static struct ltchars d_ltc;
+@@ -434,6 +455,9 @@ static struct ltchars d_ltc;
  static unsigned int d_lmode;
  #endif        /* TIOCLSET */
  #else /* not USE_SYSV_TERMIO */
@@ -114,7 +82,7 @@ $OpenBSD: patch-main_c,v 1.2 2002/11/21 
  static struct  sgttyb d_sg = {
          0, 0, 0177, CKILL, EVENP|ODDP|ECHO|XTABS|CRMOD
  };
-@@ -457,6 +492,7 @@ static struct jtchars d_jtc = {
+@@ -457,6 +481,7 @@ static struct jtchars d_jtc = {
        'J', 'B'
  };
  #endif /* sony */
@@ -122,7 +90,7 @@ $OpenBSD: patch-main_c,v 1.2 2002/11/21 
  #endif /* USE_SYSV_TERMIO */
  
  /* allow use of system default characters if defined and reasonable */
-@@ -1107,37 +1143,47 @@ char **argv;
+@@ -1107,21 +1132,19 @@ char **argv;
        char *base_name();
        int xerror(), xioerror();
  
@@ -141,27 +109,17 @@ $OpenBSD: patch-main_c,v 1.2 2002/11/21 
        if (!ttydev)
  #endif
        {
--          fprintf (stderr, 
+           fprintf (stderr, 
 -                   "%s:  unable to allocate memory for ttydev or ptydev\n",
--                   ProgramName);
--          exit (1);
-+              fprintf(stderr,
-+                      "%s: unable to allocate memory for ttydev or ptydev\n",
-+                      ProgramName);
-+              exit (1);
++                   "%s: unable to allocate memory for ttydev or ptydev\n",
+                    ProgramName);
+           exit (1);
        }
-       strcpy (ttydev, TTYDEV);
- #ifndef __osf__
+@@ -1130,14 +1153,20 @@ char **argv;
        strcpy (ptydev, PTYDEV);
  #endif
  
 -#ifdef USE_SYSV_TERMIO /* { */
-+#ifdef __OpenBSD__
-+      get_pty(NULL);
-+      seteuid(getuid());
-+      setuid(getuid());
-+#endif /* __OpenBSD__ */
-+
 +      XtSetLanguageProc (NULL, NULL, NULL);
 +
 +#if defined(USE_SYSV_TERMIO) || defined(USE_POSIX_TERMIOS) /* { */
@@ -179,7 +137,7 @@ $OpenBSD: patch-main_c,v 1.2 2002/11/21 
  #if defined(macII) || defined(ATT) || defined(CRAY) /* { */
        d_tio.c_cflag = B9600|CS8|CREAD|PARENB|HUPCL;
        d_tio.c_lflag = ISIG|ICANON|ECHO|ECHOE|ECHOK;
-@@ -1161,9 +1207,11 @@ char **argv;
+@@ -1161,9 +1190,11 @@ char **argv;
        d_tio.c_cc[VEOL2] = CNUL;
        d_tio.c_cc[VSWTCH] = CNUL;
  
@@ -192,7 +150,7 @@ $OpenBSD: patch-main_c,v 1.2 2002/11/21 
        d_tio.c_cc[VREPRINT] = CRPRNT;
        d_tio.c_cc[VDISCARD] = CFLUSH;
        d_tio.c_cc[VWERASE] = CWERASE;
-@@ -1181,11 +1229,17 @@ char **argv;
+@@ -1181,11 +1212,17 @@ char **argv;
        d_lmode = 0;
  #endif /* } TIOCLSET */
  #else  /* }{ else !macII, ATT, CRAY */
@@ -210,7 +168,7 @@ $OpenBSD: patch-main_c,v 1.2 2002/11/21 
        d_tio.c_lflag = ISIG|ICANON|ECHO|ECHOE|ECHOK;
  #ifdef ECHOKE
        d_tio.c_lflag |= ECHOKE|IEXTEN;
-@@ -1193,11 +1247,13 @@ char **argv;
+@@ -1193,11 +1230,13 @@ char **argv;
  #ifdef ECHOCTL
        d_tio.c_lflag |= ECHOCTL|IEXTEN;
  #endif
@@ -224,7 +182,7 @@ $OpenBSD: patch-main_c,v 1.2 2002/11/21 
  #ifdef __sgi
          d_tio.c_cflag &= ~(HUPCL|PARENB);
          d_tio.c_iflag |= BRKINT|ISTRIP|IGNPAR;
-@@ -1246,8 +1302,14 @@ char **argv;
+@@ -1246,8 +1285,14 @@ char **argv;
            int i;
  
            for (i = 0; i <= 2; i++) {
@@ -240,7 +198,7 @@ $OpenBSD: patch-main_c,v 1.2 2002/11/21 
                    d_tio.c_cc[VINTR] = deftio.c_cc[VINTR];
                    d_tio.c_cc[VQUIT] = deftio.c_cc[VQUIT];
                    d_tio.c_cc[VERASE] = deftio.c_cc[VERASE];
-@@ -1302,9 +1364,11 @@ char **argv;
+@@ -1302,9 +1347,11 @@ char **argv;
          d_ltc.t_werasc = '\377';
          d_ltc.t_lnextc = '\377';
  #endif        /* } TIOCSLTC */
@@ -253,7 +211,7 @@ $OpenBSD: patch-main_c,v 1.2 2002/11/21 
        d_tio.c_cc[VREPRINT] = '\377';
        d_tio.c_cc[VDISCARD] = '\377';
        d_tio.c_cc[VWERASE] = '\377';
-@@ -1361,6 +1425,14 @@ char **argv;
+@@ -1361,7 +1408,15 @@ char **argv;
                (void) fprintf(stderr, "setegid(%d): %s\n",
                               (int) egid, strerror(errno));
  #endif
@@ -263,64 +221,22 @@ $OpenBSD: patch-main_c,v 1.2 2002/11/21 
 +              /* Can totally revoke group privs */
 +              setegid(getgid());
 +              setgid(getgid());
-+      }
-+#endif
        }
++#endif
++      }
  
        waiting_for_initial_map = resource.wait_for_map;
-@@ -1719,6 +1791,32 @@ char *name;
+ 
+@@ -1719,7 +1774,7 @@ char *name;
  get_pty (pty)
      int *pty;
  {
-+#ifdef __OpenBSD__
-+      int result;
-+      static int m_tty = -1;
-+      static int m_pty = -1;
-+      struct group *ttygrp;
-+
-+      if (pty == NULL) {
-+              result = openpty(&m_pty, &m_tty, ttydev, NULL, NULL);
-+
-+              seteuid(0);
-+              if ((ttygrp = getgrnam(TTY_GROUP_NAME)) != 0) {
-+                      set_owner(ttydev, getuid(), ttygrp->gr_gid,
-+                          0600);
-+              } else {
-+                      set_owner(ttydev, getuid(), getgid(),
-+                          0600);
-+              }
-+              seteuid(getuid());
-+              return result;
-+      } else if (m_pty != -1) {
-+              *pty = m_pty;
-+              return (0);
-+      } else {
-+              return (-1);
-+      }
-+#endif /* __OpenBSD__ */
- #ifdef __osf__
+-#ifdef __osf__
++#if defined(__osf__) || defined(__OpenBSD__)
      int tty;
      return (openpty(pty, &tty, ttydev, NULL, NULL));
-@@ -2034,6 +2132,18 @@ void first_map_occurred ()
- }
- #endif /* USE_HANDSHAKE else !USE_HANDSHAKE */
- 
-+static void
-+set_owner(char *device, int uid, int gid, int mode)
-+{
-+      if (chown (device, uid, gid) < 0) {
-+              if (errno != ENOENT
-+                  && getuid() == 0) {
-+                      fprintf(stderr, "Cannot chown %s to %d,%d: %s\n",
-+                          device, uid, gid, strerror(errno));
-+              }
-+      }
-+      chmod (device, mode);
-+}
- 
- spawn ()
- /* 
-@@ -2065,6 +2175,9 @@ spawn ()
+ #endif
+@@ -2065,6 +2120,9 @@ spawn ()
        int zero = 0;
        int status;
  #else /* else not USE_SYSV_TERMIO */
@@ -330,7 +246,7 @@ $OpenBSD: patch-main_c,v 1.2 2002/11/21 
        unsigned lmode;
        struct tchars tc;
        struct ltchars ltc;
-@@ -2073,6 +2186,7 @@ spawn ()
+@@ -2073,6 +2131,7 @@ spawn ()
        int jmode;
        struct jtchars jtc;
  #endif /* sony */
@@ -338,7 +254,7 @@ $OpenBSD: patch-main_c,v 1.2 2002/11/21 
  #endif        /* USE_SYSV_TERMIO */
  
        char termcap [1024];
-@@ -2168,9 +2282,9 @@ spawn ()
+@@ -2168,9 +2227,9 @@ spawn ()
  #ifdef TIOCLSET
                                lmode = d_lmode;
  #endif        /* TIOCLSET */
@@ -350,7 +266,7 @@ $OpenBSD: patch-main_c,v 1.2 2002/11/21 
                                sg = d_sg;
                                tc = d_tc;
                                discipline = d_disipline;
-@@ -2178,7 +2292,7 @@ spawn ()
+@@ -2178,7 +2237,7 @@ spawn ()
                                jmode = d_jmode;
                                jtc = d_jtc;
  #endif /* sony */
@@ -359,7 +275,7 @@ $OpenBSD: patch-main_c,v 1.2 2002/11/21 
                        } else {
                            SysError(ERROR_OPDEVTTY);
                        }
-@@ -2202,6 +2316,10 @@ spawn ()
+@@ -2202,6 +2261,10 @@ spawn ()
                                tio = d_tio;
  
  #else /* not USE_SYSV_TERMIO */
@@ -370,7 +286,7 @@ $OpenBSD: patch-main_c,v 1.2 2002/11/21 
                        if(ioctl(tty, TIOCGETP, (char *)&sg) == -1)
                                sg = d_sg;
                        if(ioctl(tty, TIOCGETC, (char *)&tc) == -1)
-@@ -2214,6 +2332,7 @@ spawn ()
+@@ -2214,6 +2277,7 @@ spawn ()
                        if(ioctl(tty, TIOCKGETC, (char *)&jtc) == -1)
                                jtc = d_jtc;
  #endif /* sony */
@@ -378,7 +294,7 @@ $OpenBSD: patch-main_c,v 1.2 2002/11/21 
  #endif        /* USE_SYSV_TERMIO */
                        close (tty);
                        /* tty is no longer an open fd! */
-@@ -2507,6 +2626,7 @@ spawn ()
+@@ -2507,6 +2571,7 @@ spawn ()
                                break;
  #endif        /* USE_SYSV_PGRP */
                        }
@@ -386,15 +302,7 @@ $OpenBSD: patch-main_c,v 1.2 2002/11/21 
  
  #ifdef TIOCSCTTY
                        ioctl(tty, TIOCSCTTY, 0);
-@@ -2555,7 +2675,6 @@ spawn ()
- 
- #ifdef USE_TTY_GROUP
-       { 
--#include <grp.h>
-               struct group *ttygrp;
-               if (ttygrp = getgrnam("tty")) {
-                       /* change ownership of tty to real uid, "tty" gid */
-@@ -2581,7 +2700,7 @@ spawn ()
+@@ -2581,7 +2646,7 @@ spawn ()
                 * set up the tty modes
                 */
                {
@@ -403,7 +311,7 @@ $OpenBSD: patch-main_c,v 1.2 2002/11/21 
  #if defined(umips) || defined(CRAY) || defined(linux)
                    /* If the control tty had its modes screwed around with,
                       eg. by lineedit in the shell, or emacs, etc. then tio
-@@ -2598,12 +2717,15 @@ spawn ()
+@@ -2598,12 +2663,15 @@ spawn ()
                    tio.c_iflag &= ~(INLCR|IGNCR);
                    tio.c_iflag |= ICRNL;
                    /* ouput: cr->cr, nl is not return, no delays, ln->cr/nl */
@@ -419,7 +327,7 @@ $OpenBSD: patch-main_c,v 1.2 2002/11/21 
  #ifdef BAUD_0
                    /* baud rate is 0 (don't care) */
                    tio.c_cflag &= ~(CBAUD);
-@@ -2612,6 +2734,13 @@ spawn ()
+@@ -2612,6 +2680,13 @@ spawn ()
                    tio.c_cflag &= ~(CBAUD);
                    tio.c_cflag |= B9600;
  #endif        /* !BAUD_0 */
@@ -433,7 +341,7 @@ $OpenBSD: patch-main_c,v 1.2 2002/11/21 
                    tio.c_cflag &= ~CSIZE;
                    if (screen->input_eight_bits)
                        tio.c_cflag |= CS8;
-@@ -2723,9 +2852,14 @@ spawn ()
+@@ -2723,9 +2798,14 @@ spawn ()
                    if (ioctl (tty, TIOCLSET, (char *)&lmode) == -1)
                            HsSysError(cp_pipe[1], ERROR_TIOCLSET);
  #endif        /* TIOCLSET */
@@ -449,14 +357,13 @@ $OpenBSD: patch-main_c,v 1.2 2002/11/21 
  #ifdef KTERM
                    sg.sg_flags &= ~(ALLDELAY | XTABS | CBREAK | RAW
                                                | EVENP | ODDP);
-@@ -3100,6 +3234,15 @@ spawn ()
+@@ -3100,6 +3180,14 @@ spawn ()
                                    close(i);
                                }
  #endif /* LASTLOG */
 +
 +#ifdef __OpenBSD__
 +                              /* Switch to real gid after writing utmp entry 
*/
-+                              utmpGid = getegid();
 +                              if (getgid() != getegid()) {
 +                                      utmpGid = getegid();
 +                                      setegid(getgid());
@@ -465,7 +372,7 @@ $OpenBSD: patch-main_c,v 1.2 2002/11/21 
                        } else
                                tslot = -tslot;
                }
-@@ -3272,11 +3415,11 @@ spawn ()
+@@ -3272,11 +3360,11 @@ spawn ()
                shname_minus = malloc(strlen(shname) + 2);
                (void) strcpy(shname_minus, "-");
                (void) strcat(shname_minus, shname);
@@ -479,7 +386,7 @@ $OpenBSD: patch-main_c,v 1.2 2002/11/21 
  
  #ifdef USE_LOGIN_DASH_P
                if (term->misc.login_shell && pw && added_utmp_entry)
-@@ -3459,6 +3602,12 @@ Exit(n)
+@@ -3459,6 +3547,12 @@ Exit(n)
            && added_utmp_entry
  #endif /* USE_HANDSHAKE */
            ) {
Index: pkg/PLIST
===================================================================
RCS file: /cvs/ports/japanese/kterm/pkg/PLIST,v
retrieving revision 1.7
diff -u -p -r1.7 PLIST
--- pkg/PLIST   4 Sep 2005 23:30:16 -0000       1.7
+++ pkg/PLIST   1 Jun 2013 02:28:23 -0000
@@ -1,10 +1,8 @@
 @comment $OpenBSD: PLIST,v 1.7 2005/09/04 23:30:16 espie Exp $
-@mode ug+s
-@owner root
+@mode g+s
 @group utmp
 bin/kterm
 @mode
-@owner
 @group
 lib/X11/app-defaults/KTerm
 @man man/cat1/kterm.0
-- 
Christian "naddy" Weisgerber                          [email protected]

Reply via email to