mirror of
git://slackware.nl/current.git
synced 2024-12-29 10:25:00 +01:00
1184 lines
29 KiB
Diff
1184 lines
29 KiB
Diff
|
--- ./configure.ac.orig 2015-06-17 06:57:42.000000000 -0500
|
||
|
+++ ./configure.ac 2018-03-31 11:21:43.971399093 -0500
|
||
|
@@ -113,7 +113,6 @@
|
||
|
support_fading=no
|
||
|
support_keepscrolling=no
|
||
|
support_selectionscrolling=no
|
||
|
- support_lastlog=no
|
||
|
support_mousewheel=no
|
||
|
support_mouseslipwheel=no
|
||
|
support_text_blink=no
|
||
|
@@ -121,8 +120,6 @@
|
||
|
support_scroll_rxvt=no
|
||
|
support_scroll_next=no
|
||
|
support_scroll_xterm=no
|
||
|
- support_utmp=no
|
||
|
- support_wtmp=no
|
||
|
support_xim=no
|
||
|
support_pixbuf=no
|
||
|
support_startup_notification=no
|
||
|
@@ -141,7 +138,6 @@
|
||
|
support_fading=yes
|
||
|
support_keepscrolling=yes
|
||
|
support_selectionscrolling=yes
|
||
|
- support_lastlog=yes
|
||
|
support_mousewheel=yes
|
||
|
support_mouseslipwheel=yes
|
||
|
support_text_blink=yes
|
||
|
@@ -149,8 +145,6 @@
|
||
|
support_scroll_rxvt=yes
|
||
|
support_scroll_next=yes
|
||
|
support_scroll_xterm=yes
|
||
|
- support_utmp=yes
|
||
|
- support_wtmp=yes
|
||
|
support_xim=yes
|
||
|
support_pixbuf=yes
|
||
|
support_startup_notification=yes
|
||
|
@@ -513,8 +507,6 @@
|
||
|
dnl# --------------------------------------------------------------------------
|
||
|
AC_CHECK_FUNCS(unsetenv)
|
||
|
|
||
|
-UTMP_CHECK
|
||
|
-
|
||
|
dnl# --------------------------------------------------------------------------
|
||
|
|
||
|
dnl# --------------------------------------------------------------------------
|
||
|
--- ./config.h.in.orig 2015-06-17 06:57:42.000000000 -0500
|
||
|
+++ ./config.h.in 2018-03-31 11:21:43.970399093 -0500
|
||
|
@@ -75,9 +75,6 @@
|
||
|
/* Define to 1 if you have the `kqueue' function. */
|
||
|
#undef HAVE_KQUEUE
|
||
|
|
||
|
-/* Define to 1 if you have the <lastlog.h> header file. */
|
||
|
-#undef HAVE_LASTLOG_H
|
||
|
-
|
||
|
/* Define to 1 if you have the `rt' library (-lrt). */
|
||
|
#undef HAVE_LIBRT
|
||
|
|
||
|
@@ -156,18 +153,6 @@
|
||
|
/* Define to 1 if you have the <stropts.h> header file. */
|
||
|
#undef HAVE_STROPTS_H
|
||
|
|
||
|
-/* Define to 1 if the system has the type `struct lastlog'. */
|
||
|
-#undef HAVE_STRUCT_LASTLOG
|
||
|
-
|
||
|
-/* Define to 1 if the system has the type `struct lastlogx'. */
|
||
|
-#undef HAVE_STRUCT_LASTLOGX
|
||
|
-
|
||
|
-/* Define to 1 if the system has the type `struct utmp'. */
|
||
|
-#undef HAVE_STRUCT_UTMP
|
||
|
-
|
||
|
-/* Define to 1 if the system has the type `struct utmpx'. */
|
||
|
-#undef HAVE_STRUCT_UTMPX
|
||
|
-
|
||
|
/* Define to 1 if you have the <sys/byteorder.h> header file. */
|
||
|
#undef HAVE_SYS_BYTEORDER_H
|
||
|
|
||
|
@@ -214,33 +199,9 @@
|
||
|
/* Define to 1 if you have the `unsetenv' function. */
|
||
|
#undef HAVE_UNSETENV
|
||
|
|
||
|
-/* Define to 1 if you have the `updlastlogx' function. */
|
||
|
-#undef HAVE_UPDLASTLOGX
|
||
|
-
|
||
|
-/* Define to 1 if you have the `updwtmp' function. */
|
||
|
-#undef HAVE_UPDWTMP
|
||
|
-
|
||
|
-/* Define to 1 if you have the `updwtmpx' function. */
|
||
|
-#undef HAVE_UPDWTMPX
|
||
|
-
|
||
|
/* Define to 1 if you have the <util.h> header file. */
|
||
|
#undef HAVE_UTIL_H
|
||
|
|
||
|
-/* Define to 1 if you have the <utmpx.h> header file. */
|
||
|
-#undef HAVE_UTMPX_H
|
||
|
-
|
||
|
-/* Define if struct utmpx contains ut_host */
|
||
|
-#undef HAVE_UTMPX_HOST
|
||
|
-
|
||
|
-/* Define to 1 if you have the <utmp.h> header file. */
|
||
|
-#undef HAVE_UTMP_H
|
||
|
-
|
||
|
-/* Define if struct utmp contains ut_host */
|
||
|
-#undef HAVE_UTMP_HOST
|
||
|
-
|
||
|
-/* Define if struct utmp contains ut_pid */
|
||
|
-#undef HAVE_UTMP_PID
|
||
|
-
|
||
|
/* Define to 1 if you have the <wchar.h> header file. */
|
||
|
#undef HAVE_WCHAR_H
|
||
|
|
||
|
@@ -262,9 +223,6 @@
|
||
|
/* Define if you want ISO 14755 extended support */
|
||
|
#undef ISO_14755
|
||
|
|
||
|
-/* Define if you want to have lastlog support when utmp/utmpx is enabled */
|
||
|
-#undef LASTLOG_SUPPORT
|
||
|
-
|
||
|
/* Define to have CTRL cause wheel events to accelerate scrolling. Release
|
||
|
CTRL to halt scrolling */
|
||
|
#undef MOUSE_SLIP_WHEELING
|
||
|
@@ -322,21 +280,6 @@
|
||
|
/* Define if you want to hide the pointer while typing */
|
||
|
#undef POINTER_BLANK
|
||
|
|
||
|
-/* Define to a fallback location of lastlogx */
|
||
|
-#undef PT_LASTLOGX_FILE
|
||
|
-
|
||
|
-/* Define to a fallback location of lastlog */
|
||
|
-#undef PT_LASTLOG_FILE
|
||
|
-
|
||
|
-/* Define to a fallback location of utmp */
|
||
|
-#undef PT_UTMP_FILE
|
||
|
-
|
||
|
-/* Define to a fallback location of wtmpx */
|
||
|
-#undef PT_WTMPX_FILE
|
||
|
-
|
||
|
-/* Define to a fallback location of wtmp */
|
||
|
-#undef PT_WTMP_FILE
|
||
|
-
|
||
|
/* Resource class */
|
||
|
#undef RESCLASS
|
||
|
|
||
|
@@ -409,12 +352,6 @@
|
||
|
for multibyte characters input */
|
||
|
#undef USE_XIM
|
||
|
|
||
|
-/* Define if you want to have utmp/utmpx support */
|
||
|
-#undef UTMP_SUPPORT
|
||
|
-
|
||
|
-/* Define if you want to have wtmp support when utmp/utmpx is enabled */
|
||
|
-#undef WTMP_SUPPORT
|
||
|
-
|
||
|
/* Define to enable xft support */
|
||
|
#undef XFT
|
||
|
|
||
|
@@ -451,10 +388,6 @@
|
||
|
/* Enable declarations of msg_control and msg_controllen on Solaris */
|
||
|
#undef _XOPEN_SOURCE
|
||
|
|
||
|
-/* Enable declarations in utmp.h on Solaris when the XPG4v2 namespace is
|
||
|
- active */
|
||
|
-#undef __EXTENSIONS__
|
||
|
-
|
||
|
/* Define to `int' if <sys/types.h> doesn't define. */
|
||
|
#undef gid_t
|
||
|
|
||
|
--- ./libptytty/ptytty.m4.orig 2015-05-11 17:24:03.000000000 -0500
|
||
|
+++ ./libptytty/ptytty.m4 2018-03-31 11:24:41.669415706 -0500
|
||
|
@@ -51,143 +51,6 @@
|
||
|
fi
|
||
|
])
|
||
|
|
||
|
-AC_DEFUN([UTMP_CHECK],
|
||
|
-[
|
||
|
-support_utmp=yes
|
||
|
-support_wtmp=yes
|
||
|
-support_lastlog=yes
|
||
|
-
|
||
|
-AC_ARG_ENABLE(utmp,
|
||
|
- [AS_HELP_STRING([--enable-utmp],[enable utmp (utmpx) support])],
|
||
|
- [if test x$enableval = xyes -o x$enableval = xno; then
|
||
|
- support_utmp=$enableval
|
||
|
- fi])
|
||
|
-
|
||
|
-AC_ARG_ENABLE(wtmp,
|
||
|
- [AS_HELP_STRING([--enable-wtmp],[enable wtmp (wtmpx) support (requires --enable-utmp)])],
|
||
|
- [if test x$enableval = xyes -o x$enableval = xno; then
|
||
|
- support_wtmp=$enableval
|
||
|
- fi])
|
||
|
-
|
||
|
-AC_ARG_ENABLE(lastlog,
|
||
|
- [AS_HELP_STRING([--enable-lastlog],[enable lastlog support (requires --enable-utmp)])],
|
||
|
- [if test x$enableval = xyes -o x$enableval = xno; then
|
||
|
- support_lastlog=$enableval
|
||
|
- fi])
|
||
|
-
|
||
|
-if test x$support_utmp = xyes; then
|
||
|
- AC_DEFINE(UTMP_SUPPORT, 1, Define if you want to have utmp/utmpx support)
|
||
|
-fi
|
||
|
-if test x$support_wtmp = xyes; then
|
||
|
- AC_DEFINE(WTMP_SUPPORT, 1, Define if you want to have wtmp support when utmp/utmpx is enabled)
|
||
|
-fi
|
||
|
-if test x$support_lastlog = xyes; then
|
||
|
- AC_DEFINE(LASTLOG_SUPPORT, 1, Define if you want to have lastlog support when utmp/utmpx is enabled)
|
||
|
-fi
|
||
|
-
|
||
|
-AC_CHECK_FUNCS( \
|
||
|
- updwtmp \
|
||
|
- updwtmpx \
|
||
|
- updlastlogx \
|
||
|
-)
|
||
|
-
|
||
|
-AC_CHECK_HEADERS(lastlog.h)
|
||
|
-
|
||
|
-case $host in
|
||
|
- *-*-solaris*)
|
||
|
- AC_DEFINE(__EXTENSIONS__, 1, Enable declarations in utmp.h on Solaris when the XPG4v2 namespace is active)
|
||
|
- ;;
|
||
|
-esac
|
||
|
-
|
||
|
-dnl# --------------------------------------------------------------------------
|
||
|
-dnl# DO ALL UTMP AND WTMP CHECKING
|
||
|
-dnl# --------------------------------------------------------------------------
|
||
|
-dnl# check for host field in utmp structure
|
||
|
-
|
||
|
-dnl# --------------------------------------------
|
||
|
-AC_CHECK_HEADERS(utmp.h, [
|
||
|
-AC_CHECK_TYPES([struct utmp], [], [], [
|
||
|
-#include <sys/types.h>
|
||
|
-#include <utmp.h>
|
||
|
-])
|
||
|
-
|
||
|
-AC_CHECK_MEMBER([struct utmp.ut_host],
|
||
|
-[AC_DEFINE(HAVE_UTMP_HOST, 1, Define if struct utmp contains ut_host)], [], [
|
||
|
-#include <sys/types.h>
|
||
|
-#include <utmp.h>
|
||
|
-])
|
||
|
-
|
||
|
-AC_CHECK_MEMBER([struct utmp.ut_pid],
|
||
|
-[AC_DEFINE(HAVE_UTMP_PID, 1, Define if struct utmp contains ut_pid)], [], [
|
||
|
-#include <sys/types.h>
|
||
|
-#include <utmp.h>
|
||
|
-])
|
||
|
-]) dnl# AC_CHECK_HEADERS(utmp.h
|
||
|
-
|
||
|
-dnl# --------------------------------------------
|
||
|
-
|
||
|
-AC_CHECK_HEADERS(utmpx.h, [
|
||
|
-AC_CHECK_TYPES([struct utmpx], [], [], [
|
||
|
-#include <sys/types.h>
|
||
|
-#include <utmpx.h>
|
||
|
-])
|
||
|
-
|
||
|
-AC_CHECK_MEMBER([struct utmpx.ut_host],
|
||
|
-[AC_DEFINE(HAVE_UTMPX_HOST, 1, Define if struct utmpx contains ut_host)], [], [
|
||
|
-#include <sys/types.h>
|
||
|
-#include <utmpx.h>
|
||
|
-])
|
||
|
-]) dnl# AC_CHECK_HEADERS(utmpx.h
|
||
|
-
|
||
|
-dnl# --------------------------------------------------------------------------
|
||
|
-dnl# check for struct lastlog
|
||
|
-AC_CHECK_TYPES([struct lastlog], [], [], [
|
||
|
-#include <sys/types.h>
|
||
|
-#include <utmp.h>
|
||
|
-#ifdef HAVE_LASTLOG_H
|
||
|
-#include <lastlog.h>
|
||
|
-#endif
|
||
|
-])
|
||
|
-
|
||
|
-dnl# check for struct lastlogx
|
||
|
-AC_CHECK_TYPES([struct lastlogx], [], [], [
|
||
|
-#include <sys/types.h>
|
||
|
-#include <utmpx.h>
|
||
|
-#ifdef HAVE_LASTLOG_H
|
||
|
-#include <lastlog.h>
|
||
|
-#endif
|
||
|
-])
|
||
|
-
|
||
|
-dnl# --------------------------------------------------------------------------
|
||
|
-dnl# FIND FILES
|
||
|
-dnl# --------------------------------------------------------------------------
|
||
|
-
|
||
|
-dnl# find utmp
|
||
|
-PT_FIND_FILE([utmp], [PT_UTMP_FILE],
|
||
|
-["/var/run/utmp" "/var/adm/utmp" "/etc/utmp" "/usr/etc/utmp" "/usr/adm/utmp"])
|
||
|
-
|
||
|
-dnl# --------------------------------------------------------------------------
|
||
|
-
|
||
|
-dnl# find wtmp
|
||
|
-PT_FIND_FILE([wtmp], [PT_WTMP_FILE],
|
||
|
-["/var/log/wtmp" "/var/adm/wtmp" "/etc/wtmp" "/usr/etc/wtmp" "/usr/adm/wtmp"])
|
||
|
-dnl# --------------------------------------------------------------------------
|
||
|
-
|
||
|
-dnl# find wtmpx
|
||
|
-PT_FIND_FILE([wtmpx], [PT_WTMPX_FILE],
|
||
|
-["/var/log/wtmpx" "/var/adm/wtmpx"])
|
||
|
-dnl# --------------------------------------------------------------------------
|
||
|
-
|
||
|
-dnl# find lastlog
|
||
|
-PT_FIND_FILE([lastlog], [PT_LASTLOG_FILE],
|
||
|
-["/var/log/lastlog" "/var/adm/lastlog"])
|
||
|
-dnl# --------------------------------------------------------------------------
|
||
|
-
|
||
|
-dnl# find lastlogx
|
||
|
-PT_FIND_FILE([lastlogx], [PT_LASTLOGX_FILE],
|
||
|
-["/var/log/lastlogx" "/var/adm/lastlogx"])
|
||
|
-])
|
||
|
-
|
||
|
AC_DEFUN([SCM_RIGHTS_CHECK],
|
||
|
[
|
||
|
AH_TEMPLATE([_XOPEN_SOURCE], [Enable declarations of msg_control and msg_controllen on Solaris])
|
||
|
--- ./libptytty/src/proxy.C.orig 2015-04-11 13:27:01.000000000 -0500
|
||
|
+++ ./libptytty/src/proxy.C 2018-03-31 11:25:17.787419082 -0500
|
||
|
@@ -1,351 +0,0 @@
|
||
|
-/*----------------------------------------------------------------------*
|
||
|
- * File: proxy.C
|
||
|
- *----------------------------------------------------------------------*
|
||
|
- *
|
||
|
- * All portions of code are copyright by their respective author/s.
|
||
|
- * Copyright (c) 2006 Marc Lehmann <schmorp@schmorp.de>
|
||
|
- *
|
||
|
- * This program is free software; you can redistribute it and/or modify
|
||
|
- * it under the terms of the GNU General Public License as published by
|
||
|
- * the Free Software Foundation; either version 2 of the License, or
|
||
|
- * (at your option) any later version.
|
||
|
- *
|
||
|
- * This program is distributed in the hope that it will be useful,
|
||
|
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
- * GNU General Public License for more details.
|
||
|
- *
|
||
|
- * You should have received a copy of the GNU General Public License
|
||
|
- * along with this program; if not, write to the Free Software
|
||
|
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||
|
- *---------------------------------------------------------------------*/
|
||
|
-
|
||
|
-#include "config.h"
|
||
|
-
|
||
|
-#include "ptytty.h"
|
||
|
-
|
||
|
-#include "estl.h"
|
||
|
-
|
||
|
-#include <stdio.h>
|
||
|
-#include <string.h>
|
||
|
-#include <signal.h>
|
||
|
-
|
||
|
-#include <sys/types.h>
|
||
|
-#include <sys/socket.h>
|
||
|
-#include <unistd.h>
|
||
|
-#include <fcntl.h>
|
||
|
-#include <errno.h>
|
||
|
-
|
||
|
-// helper/proxy support
|
||
|
-
|
||
|
-#if PTYTTY_HELPER
|
||
|
-
|
||
|
-static int sock_fd = -1, lock_fd = -1;
|
||
|
-static int helper_pid;
|
||
|
-
|
||
|
-struct command
|
||
|
-{
|
||
|
- enum { get, login, destroy } type;
|
||
|
-
|
||
|
- ptytty *id;
|
||
|
-
|
||
|
- bool login_shell;
|
||
|
- int cmd_pid;
|
||
|
- char hostname[512]; // arbitrary, but should be plenty
|
||
|
-};
|
||
|
-
|
||
|
-struct ptytty_proxy : ptytty
|
||
|
-{
|
||
|
- ptytty *id;
|
||
|
-
|
||
|
- ptytty_proxy ()
|
||
|
- : id(0)
|
||
|
- {
|
||
|
- }
|
||
|
-
|
||
|
- ~ptytty_proxy ();
|
||
|
-
|
||
|
- bool get ();
|
||
|
- void login (int cmd_pid, bool login_shell, const char *hostname);
|
||
|
-};
|
||
|
-
|
||
|
-#if PTYTTY_REENTRANT
|
||
|
-# define NEED_TOKEN do { char ch; read (lock_fd, &ch , 1); } while (0)
|
||
|
-# define GIVE_TOKEN write (lock_fd, &lock_fd, 1)
|
||
|
-#else
|
||
|
-# define NEED_TOKEN (void)0
|
||
|
-# define GIVE_TOKEN (void)0
|
||
|
-#endif
|
||
|
-
|
||
|
-bool
|
||
|
-ptytty_proxy::get ()
|
||
|
-{
|
||
|
- NEED_TOKEN;
|
||
|
-
|
||
|
- command cmd;
|
||
|
-
|
||
|
- cmd.type = command::get;
|
||
|
-
|
||
|
- write (sock_fd, &cmd, sizeof (cmd));
|
||
|
-
|
||
|
- if (read (sock_fd, &id, sizeof (id)) != sizeof (id))
|
||
|
- PTYTTY_FATAL ("protocol error while creating pty using helper process, aborting.\n");
|
||
|
-
|
||
|
- if (!id)
|
||
|
- {
|
||
|
- GIVE_TOKEN;
|
||
|
- return false;
|
||
|
- }
|
||
|
-
|
||
|
- if ((pty = recv_fd (sock_fd)) < 0
|
||
|
- || (tty = recv_fd (sock_fd)) < 0)
|
||
|
- PTYTTY_FATAL ("protocol error while reading pty/tty fds from helper process, aborting.\n");
|
||
|
-
|
||
|
- GIVE_TOKEN;
|
||
|
- return true;
|
||
|
-}
|
||
|
-
|
||
|
-void
|
||
|
-ptytty_proxy::login (int cmd_pid, bool login_shell, const char *hostname)
|
||
|
-{
|
||
|
- NEED_TOKEN;
|
||
|
-
|
||
|
- command cmd;
|
||
|
-
|
||
|
- cmd.type = command::login;
|
||
|
- cmd.id = id;
|
||
|
- cmd.cmd_pid = cmd_pid;
|
||
|
- cmd.login_shell = login_shell;
|
||
|
- strncpy (cmd.hostname, hostname, sizeof (cmd.hostname));
|
||
|
-
|
||
|
- write (sock_fd, &cmd, sizeof (cmd));
|
||
|
-
|
||
|
- GIVE_TOKEN;
|
||
|
-}
|
||
|
-
|
||
|
-ptytty_proxy::~ptytty_proxy ()
|
||
|
-{
|
||
|
- if (id)
|
||
|
- {
|
||
|
- close_tty ();
|
||
|
-
|
||
|
- if (pty >= 0)
|
||
|
- close (pty);
|
||
|
-
|
||
|
- NEED_TOKEN;
|
||
|
-
|
||
|
- command cmd;
|
||
|
-
|
||
|
- cmd.type = command::destroy;
|
||
|
- cmd.id = id;
|
||
|
-
|
||
|
- write (sock_fd, &cmd, sizeof (cmd));
|
||
|
-
|
||
|
- GIVE_TOKEN;
|
||
|
- }
|
||
|
-}
|
||
|
-
|
||
|
-static
|
||
|
-void serve ()
|
||
|
-{
|
||
|
- command cmd;
|
||
|
- vector<ptytty *> ptys;
|
||
|
-
|
||
|
- for (;;)
|
||
|
- {
|
||
|
- GIVE_TOKEN;
|
||
|
-
|
||
|
- if (read (sock_fd, &cmd, sizeof (command)) != sizeof (command))
|
||
|
- break;
|
||
|
-
|
||
|
- if (cmd.type == command::get)
|
||
|
- {
|
||
|
- // -> id ptyfd ttyfd
|
||
|
- cmd.id = new ptytty_unix;
|
||
|
-
|
||
|
- if (cmd.id->get ())
|
||
|
- {
|
||
|
- write (sock_fd, &cmd.id, sizeof (cmd.id));
|
||
|
- ptys.push_back (cmd.id);
|
||
|
-
|
||
|
- ptytty::send_fd (sock_fd, cmd.id->pty);
|
||
|
- ptytty::send_fd (sock_fd, cmd.id->tty);
|
||
|
-
|
||
|
- cmd.id->close_tty ();
|
||
|
- }
|
||
|
- else
|
||
|
- {
|
||
|
- delete cmd.id;
|
||
|
- cmd.id = 0;
|
||
|
- write (sock_fd, &cmd.id, sizeof (cmd.id));
|
||
|
- }
|
||
|
- }
|
||
|
- else if (cmd.type == command::login)
|
||
|
- {
|
||
|
-#if UTMP_SUPPORT
|
||
|
- if (find (ptys.begin (), ptys.end (), cmd.id) != ptys.end ())
|
||
|
- {
|
||
|
- cmd.hostname[sizeof (cmd.hostname) - 1] = 0;
|
||
|
- cmd.id->login (cmd.cmd_pid, cmd.login_shell, cmd.hostname);
|
||
|
- }
|
||
|
-#endif
|
||
|
- }
|
||
|
- else if (cmd.type == command::destroy)
|
||
|
- {
|
||
|
- vector<ptytty *>::iterator pty = find (ptys.begin (), ptys.end (), cmd.id);
|
||
|
-
|
||
|
- if (pty != ptys.end ())
|
||
|
- {
|
||
|
- delete *pty;
|
||
|
- ptys.erase (pty);
|
||
|
- }
|
||
|
- }
|
||
|
- else
|
||
|
- break;
|
||
|
-
|
||
|
- NEED_TOKEN;
|
||
|
- }
|
||
|
-
|
||
|
- // destroy all ptys
|
||
|
- for (vector<ptytty *>::iterator i = ptys.end (); i-- > ptys.begin (); )
|
||
|
- delete *i;
|
||
|
-}
|
||
|
-
|
||
|
-void
|
||
|
-ptytty::use_helper ()
|
||
|
-{
|
||
|
- if (sock_fd >= 0)
|
||
|
- return;
|
||
|
-
|
||
|
- int sv[2];
|
||
|
-
|
||
|
- if (socketpair (AF_UNIX, SOCK_STREAM, 0, sv))
|
||
|
- PTYTTY_FATAL ("could not create socket to communicate with pty/sessiondb helper, aborting.\n");
|
||
|
-
|
||
|
-#if PTYTTY_REENTRANT
|
||
|
- int lv[2];
|
||
|
-
|
||
|
- if (socketpair (AF_UNIX, SOCK_STREAM, 0, lv))
|
||
|
- PTYTTY_FATAL ("could not create socket to communicate with pty/sessiondb helper, aborting.\n");
|
||
|
-#endif
|
||
|
-
|
||
|
- helper_pid = fork ();
|
||
|
-
|
||
|
- if (helper_pid < 0)
|
||
|
- PTYTTY_FATAL ("could not create pty/sessiondb helper process, aborting.\n");
|
||
|
-
|
||
|
- if (helper_pid)
|
||
|
- {
|
||
|
- // client, process
|
||
|
- sock_fd = sv[0];
|
||
|
- close (sv[1]);
|
||
|
- fcntl (sock_fd, F_SETFD, FD_CLOEXEC);
|
||
|
-#if PTYTTY_REENTRANT
|
||
|
- lock_fd = lv[0];
|
||
|
- close (lv[1]);
|
||
|
- fcntl (lock_fd, F_SETFD, FD_CLOEXEC);
|
||
|
-#endif
|
||
|
- }
|
||
|
- else
|
||
|
- {
|
||
|
- // server, pty-helper
|
||
|
- sock_fd = sv[1];
|
||
|
-#if PTYTTY_REENTRANT
|
||
|
- lock_fd = lv[1];
|
||
|
-#endif
|
||
|
-
|
||
|
- chdir ("/");
|
||
|
-
|
||
|
- signal (SIGHUP, SIG_IGN);
|
||
|
- signal (SIGTERM, SIG_IGN);
|
||
|
- signal (SIGINT, SIG_IGN);
|
||
|
- signal (SIGPIPE, SIG_IGN);
|
||
|
-
|
||
|
- for (int fd = 0; fd < 1023; fd++)
|
||
|
- if (fd != sock_fd && fd != lock_fd)
|
||
|
- close (fd);
|
||
|
-
|
||
|
- serve ();
|
||
|
- _exit (EXIT_SUCCESS);
|
||
|
- }
|
||
|
-}
|
||
|
-
|
||
|
-#endif
|
||
|
-
|
||
|
-ptytty *
|
||
|
-ptytty::create ()
|
||
|
-{
|
||
|
-#if PTYTTY_HELPER
|
||
|
- if (helper_pid)
|
||
|
- // use helper process
|
||
|
- return new ptytty_proxy;
|
||
|
- else
|
||
|
-#endif
|
||
|
- return new ptytty_unix;
|
||
|
-}
|
||
|
-
|
||
|
-void
|
||
|
-ptytty::sanitise_stdfd ()
|
||
|
-{
|
||
|
- // sanitise stdin/stdout/stderr to point to *something*.
|
||
|
- for (int fd = 0; fd <= 2; ++fd)
|
||
|
- if (fcntl (fd, F_GETFL) < 0 && errno == EBADF)
|
||
|
- {
|
||
|
- int fd2 = open ("/dev/tty", fd ? O_WRONLY : O_RDONLY);
|
||
|
-
|
||
|
- if (fd2 < 0)
|
||
|
- fd2 = open ("/dev/null", fd ? O_WRONLY : O_RDONLY);
|
||
|
-
|
||
|
- if (fd2 != fd)
|
||
|
- PTYTTY_FATAL ("unable to sanitise fds, aborting.\n");
|
||
|
- }
|
||
|
-}
|
||
|
-
|
||
|
-void
|
||
|
-ptytty::init ()
|
||
|
-{
|
||
|
- sanitise_stdfd ();
|
||
|
-
|
||
|
- uid_t uid = getuid ();
|
||
|
- gid_t gid = getgid ();
|
||
|
-
|
||
|
- // before doing anything else, check for setuid/setgid operation,
|
||
|
- // start the helper process and drop privileges
|
||
|
- if (uid != geteuid ()
|
||
|
- || gid != getegid ())
|
||
|
- {
|
||
|
-#if PTYTTY_HELPER
|
||
|
- use_helper ();
|
||
|
-#else
|
||
|
- PTYTTY_WARN ("running setuid/setgid without pty helper compiled in, continuing unprivileged.\n");
|
||
|
-#endif
|
||
|
-
|
||
|
- drop_privileges ();
|
||
|
- }
|
||
|
-}
|
||
|
-
|
||
|
-void
|
||
|
-ptytty::drop_privileges ()
|
||
|
-{
|
||
|
- uid_t uid = getuid ();
|
||
|
- gid_t gid = getgid ();
|
||
|
-
|
||
|
- // drop privileges
|
||
|
-#if HAVE_SETRESUID
|
||
|
- setresgid (gid, gid, gid);
|
||
|
- setresuid (uid, uid, uid);
|
||
|
-#elif HAVE_SETREUID
|
||
|
- setregid (gid, gid);
|
||
|
- setreuid (uid, uid);
|
||
|
-#elif HAVE_SETUID
|
||
|
- setgid (gid);
|
||
|
- setuid (uid);
|
||
|
-#else
|
||
|
-# error no way to drop privileges, configure failed?
|
||
|
-#endif
|
||
|
-
|
||
|
- if (uid != geteuid ()
|
||
|
- || gid != getegid ())
|
||
|
- PTYTTY_FATAL ("unable to drop privileges, aborting.\n");
|
||
|
-}
|
||
|
-
|
||
|
--- ./libptytty/src/ptytty.h.orig 2014-11-16 06:22:34.000000000 -0600
|
||
|
+++ ./libptytty/src/ptytty.h 2018-03-31 11:21:57.530400360 -0500
|
||
|
@@ -8,23 +8,10 @@
|
||
|
# define NO_SETOWNER_TTYDEV 1
|
||
|
#endif
|
||
|
|
||
|
-#if UTMP_SUPPORT
|
||
|
-# if defined(__GLIBC__)
|
||
|
-# undef HAVE_STRUCT_UTMPX
|
||
|
-# endif
|
||
|
-
|
||
|
-# if ! defined(HAVE_STRUCT_UTMPX) && ! defined(HAVE_STRUCT_UTMP)
|
||
|
-# error cannot build with utmp support - no utmp or utmpx struct found
|
||
|
-# endif
|
||
|
-
|
||
|
-#endif
|
||
|
-
|
||
|
struct ptytty_unix : ptytty
|
||
|
{
|
||
|
char *name;
|
||
|
|
||
|
- void log_session (bool login, const char *hostname);
|
||
|
-
|
||
|
public:
|
||
|
|
||
|
ptytty_unix ();
|
||
|
@@ -35,13 +22,10 @@
|
||
|
|
||
|
void login (int cmd_pid, bool login_shell, const char *hostname);
|
||
|
|
||
|
-#if UTMP_SUPPORT
|
||
|
- int utmp_pos;
|
||
|
int cmd_pid;
|
||
|
bool login_shell;
|
||
|
|
||
|
void logout ();
|
||
|
-#endif
|
||
|
};
|
||
|
|
||
|
#endif
|
||
|
--- ./libptytty/src/ptytty.C.orig 2015-05-11 17:24:03.000000000 -0500
|
||
|
+++ ./libptytty/src/ptytty.C 2018-03-31 11:21:57.529400360 -0500
|
||
|
@@ -217,6 +217,29 @@
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
+ptytty *
|
||
|
+ptytty::create ()
|
||
|
+{
|
||
|
+ return new ptytty_unix;
|
||
|
+}
|
||
|
+
|
||
|
+void
|
||
|
+ptytty::sanitise_stdfd ()
|
||
|
+{
|
||
|
+ // sanitise stdin/stdout/stderr to point to *something*.
|
||
|
+ for (int fd = 0; fd <= 2; ++fd)
|
||
|
+ if (fcntl (fd, F_GETFL) < 0 && errno == EBADF)
|
||
|
+ {
|
||
|
+ int fd2 = open ("/dev/tty", fd ? O_WRONLY : O_RDONLY);
|
||
|
+
|
||
|
+ if (fd2 < 0)
|
||
|
+ fd2 = open ("/dev/null", fd ? O_WRONLY : O_RDONLY);
|
||
|
+
|
||
|
+ if (fd2 != fd)
|
||
|
+ abort ();
|
||
|
+ }
|
||
|
+}
|
||
|
+
|
||
|
void
|
||
|
ptytty::close_tty ()
|
||
|
{
|
||
|
@@ -287,16 +310,12 @@
|
||
|
ptytty_unix::ptytty_unix ()
|
||
|
{
|
||
|
name = 0;
|
||
|
-#if UTMP_SUPPORT
|
||
|
cmd_pid = 0;
|
||
|
-#endif
|
||
|
}
|
||
|
|
||
|
ptytty_unix::~ptytty_unix ()
|
||
|
{
|
||
|
-#if UTMP_SUPPORT
|
||
|
logout ();
|
||
|
-#endif
|
||
|
put ();
|
||
|
}
|
||
|
|
||
|
@@ -390,18 +409,6 @@
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
-#if UTMP_SUPPORT
|
||
|
-# if defined(HAVE_STRUCT_UTMP) && !defined(HAVE_UTMP_PID)
|
||
|
- int fd_stdin = dup (STDIN_FILENO);
|
||
|
- dup2 (tty, STDIN_FILENO);
|
||
|
-
|
||
|
- utmp_pos = ttyslot ();
|
||
|
-
|
||
|
- dup2 (fd_stdin, STDIN_FILENO);
|
||
|
- close (fd_stdin);
|
||
|
-# endif
|
||
|
-#endif
|
||
|
-
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
--- ./libptytty/src/logging.C.orig 2014-11-16 06:22:34.000000000 -0600
|
||
|
+++ ./libptytty/src/logging.C 2018-03-31 11:21:57.527400360 -0500
|
||
|
@@ -36,251 +36,8 @@
|
||
|
|
||
|
#include "ptytty.h"
|
||
|
|
||
|
-#include <sys/types.h>
|
||
|
+#include "utempter.h"
|
||
|
|
||
|
-#if UTMP_SUPPORT
|
||
|
-
|
||
|
-#ifdef HAVE_UTMPX_H
|
||
|
-# include <utmpx.h>
|
||
|
-#endif
|
||
|
-#ifdef HAVE_UTMP_H
|
||
|
-# include <utmp.h>
|
||
|
-#endif
|
||
|
-#ifdef HAVE_LASTLOG_H
|
||
|
-# include <lastlog.h>
|
||
|
-#endif
|
||
|
-
|
||
|
-#if !defined(UTMP_FILE)
|
||
|
-# if defined(_PATH_UTMP)
|
||
|
-# define UTMP_FILE _PATH_UTMP
|
||
|
-# elif defined(PT_UTMP_FILE)
|
||
|
-# define UTMP_FILE PT_UTMP_FILE
|
||
|
-# endif
|
||
|
-#endif
|
||
|
-#if !defined(WTMP_FILE)
|
||
|
-# if defined(_PATH_WTMP)
|
||
|
-# define WTMP_FILE _PATH_WTMP
|
||
|
-# elif defined(PT_WTMP_FILE)
|
||
|
-# define WTMP_FILE PT_WTMP_FILE
|
||
|
-# endif
|
||
|
-#endif
|
||
|
-#if !defined(WTMPX_FILE)
|
||
|
-# if defined(_PATH_WTMPX)
|
||
|
-# define WTMPX_FILE _PATH_WTMPX
|
||
|
-# elif defined(PT_WTMPX_FILE)
|
||
|
-# define WTMPX_FILE PT_WTMPX_FILE
|
||
|
-# endif
|
||
|
-#endif
|
||
|
-#if !defined(LASTLOG_FILE)
|
||
|
-# if defined(_PATH_LASTLOG)
|
||
|
-# define LASTLOG_FILE _PATH_LASTLOG
|
||
|
-# elif defined(PT_LASTLOG_FILE)
|
||
|
-# define LASTLOG_FILE PT_LASTLOG_FILE
|
||
|
-# endif
|
||
|
-#endif
|
||
|
-#if !defined(LASTLOGX_FILE)
|
||
|
-# if defined(_PATH_LASTLOGX)
|
||
|
-# define LASTLOGX_FILE _PATH_LASTLOGX
|
||
|
-# elif defined(PT_LASTLOGX_FILE)
|
||
|
-# define LASTLOGX_FILE PT_LASTLOGX_FILE
|
||
|
-# endif
|
||
|
-#endif
|
||
|
-
|
||
|
-#include <pwd.h>
|
||
|
-
|
||
|
-#include <stdio.h>
|
||
|
-#include <string.h>
|
||
|
-
|
||
|
-#include <sys/stat.h>
|
||
|
-#include <fcntl.h>
|
||
|
-#include <unistd.h>
|
||
|
-#include <time.h>
|
||
|
-#include <errno.h>
|
||
|
-
|
||
|
-/*
|
||
|
- * BSD style utmp entry
|
||
|
- * ut_line, ut_name, ut_host, ut_time
|
||
|
- * SYSV style utmp (and utmpx) entry
|
||
|
- * ut_user, ut_id, ut_line, ut_pid, ut_type, ut_exit, ut_time
|
||
|
- */
|
||
|
-
|
||
|
-/* ------------------------------------------------------------------------- */
|
||
|
-/*
|
||
|
- * Write a BSD style utmp entry
|
||
|
- */
|
||
|
-#if defined(HAVE_STRUCT_UTMP) && !defined(HAVE_UTMP_PID)
|
||
|
-static void
|
||
|
-write_bsd_utmp (int utmp_pos, struct utmp *ut)
|
||
|
-{
|
||
|
- int fd;
|
||
|
-
|
||
|
- if (utmp_pos <= 0 || (fd = open (UTMP_FILE, O_WRONLY)) == -1)
|
||
|
- return;
|
||
|
-
|
||
|
- if (lseek (fd, (off_t) (utmp_pos * sizeof (struct utmp)), SEEK_SET) != -1)
|
||
|
- write (fd, ut, sizeof (struct utmp));
|
||
|
- close (fd);
|
||
|
-}
|
||
|
-#endif
|
||
|
-
|
||
|
-/* ------------------------------------------------------------------------- */
|
||
|
-/*
|
||
|
- * Update a BSD style wtmp entry
|
||
|
- */
|
||
|
-#if defined(WTMP_SUPPORT) && !defined(HAVE_UPDWTMP) && defined(HAVE_STRUCT_UTMP)
|
||
|
-static void
|
||
|
-update_wtmp (const char *fname, const struct utmp *ut)
|
||
|
-{
|
||
|
- int fd, gotlock, retry;
|
||
|
- struct flock lck; /* fcntl locking scheme */
|
||
|
- struct stat sbuf;
|
||
|
-
|
||
|
- if ((fd = open (fname, O_WRONLY | O_APPEND, 0)) < 0)
|
||
|
- return;
|
||
|
-
|
||
|
- lck.l_whence = SEEK_END; /* start lock at current eof */
|
||
|
- lck.l_len = 0; /* end at ``largest possible eof'' */
|
||
|
- lck.l_start = 0;
|
||
|
- lck.l_type = F_WRLCK; /* we want a write lock */
|
||
|
-
|
||
|
- /* attempt lock with F_SETLK; F_SETLKW would cause a deadlock! */
|
||
|
- for (retry = 10, gotlock = 0; retry--;)
|
||
|
- if (fcntl (fd, F_SETLK, &lck) != -1)
|
||
|
- {
|
||
|
- gotlock = 1;
|
||
|
- break;
|
||
|
- }
|
||
|
- else if (errno != EAGAIN && errno != EACCES)
|
||
|
- break;
|
||
|
-
|
||
|
- if (gotlock)
|
||
|
- {
|
||
|
- if (fstat (fd, &sbuf) == 0)
|
||
|
- if (write (fd, ut, sizeof (struct utmp)) != sizeof (struct utmp))
|
||
|
- ftruncate (fd, sbuf.st_size); /* remove bad writes */
|
||
|
-
|
||
|
- lck.l_type = F_UNLCK; /* unlocking the file */
|
||
|
- fcntl (fd, F_SETLK, &lck);
|
||
|
- }
|
||
|
-
|
||
|
- close (fd);
|
||
|
-}
|
||
|
-#endif
|
||
|
-
|
||
|
-/* ------------------------------------------------------------------------- */
|
||
|
-#ifdef LASTLOG_SUPPORT
|
||
|
-static void
|
||
|
-update_lastlog (const char *pty, const char *host)
|
||
|
-{
|
||
|
-# if defined(HAVE_STRUCT_LASTLOGX) && defined(HAVE_UPDLASTLOGX)
|
||
|
- struct lastlogx llx;
|
||
|
-# endif
|
||
|
-# ifdef HAVE_STRUCT_LASTLOG
|
||
|
- int fd;
|
||
|
- struct lastlog ll;
|
||
|
-# endif
|
||
|
-
|
||
|
-# if defined(HAVE_STRUCT_LASTLOGX) && defined(HAVE_UPDLASTLOGX)
|
||
|
- memset (&llx, 0, sizeof (llx));
|
||
|
- llx.ll_tv.tv_sec = time (NULL);
|
||
|
- llx.ll_tv.tv_usec = 0;
|
||
|
- strncpy (llx.ll_line, pty, sizeof (llx.ll_line));
|
||
|
- strncpy (llx.ll_host, host, sizeof (llx.ll_host));
|
||
|
- updlastlogx (LASTLOGX_FILE, getuid (), &llx);
|
||
|
-# endif
|
||
|
-
|
||
|
-# ifdef HAVE_STRUCT_LASTLOG
|
||
|
- memset (&ll, 0, sizeof (ll));
|
||
|
- ll.ll_time = time (NULL);
|
||
|
- strncpy (ll.ll_line, pty, sizeof (ll.ll_line));
|
||
|
- strncpy (ll.ll_host, host, sizeof (ll.ll_host));
|
||
|
- if ((fd = open (LASTLOG_FILE, O_RDWR)) != -1)
|
||
|
- {
|
||
|
- if (lseek (fd, (off_t) (getuid () * sizeof (ll)),
|
||
|
- SEEK_SET) != -1)
|
||
|
- write (fd, &ll, sizeof (ll));
|
||
|
- close (fd);
|
||
|
- }
|
||
|
-# endif /* HAVE_STRUCT_LASTLOG */
|
||
|
-}
|
||
|
-#endif /* LASTLOG_SUPPORT */
|
||
|
-
|
||
|
-#if defined(HAVE_UTMP_PID) || defined(HAVE_STRUCT_UTMPX)
|
||
|
-static void
|
||
|
-fill_id (char *id, const char *line, size_t id_size)
|
||
|
-{
|
||
|
- size_t len = strlen (line);
|
||
|
-
|
||
|
- if (len > id_size)
|
||
|
- line += len - id_size;
|
||
|
- strncpy (id, line, id_size);
|
||
|
-}
|
||
|
-#endif
|
||
|
-
|
||
|
-#ifdef HAVE_STRUCT_UTMP
|
||
|
-static void
|
||
|
-fill_utmp (struct utmp *ut, bool login, int pid, const char *line, const char *user, const char *host)
|
||
|
-{
|
||
|
- memset (ut, 0, sizeof (struct utmp));
|
||
|
-
|
||
|
- strncpy (ut->ut_line, line, sizeof (ut->ut_line));
|
||
|
-# ifdef HAVE_UTMP_PID
|
||
|
- fill_id (ut->ut_id, line, sizeof (ut->ut_id));
|
||
|
- ut->ut_pid = pid;
|
||
|
- ut->ut_type = login ? USER_PROCESS : DEAD_PROCESS;
|
||
|
-# endif
|
||
|
- ut->ut_time = time (NULL);
|
||
|
-
|
||
|
- if (login)
|
||
|
- {
|
||
|
-# ifdef HAVE_UTMP_PID
|
||
|
- strncpy (ut->ut_user, user, sizeof (ut->ut_user));
|
||
|
-# else
|
||
|
- strncpy (ut->ut_name, user, sizeof (ut->ut_name));
|
||
|
-# endif
|
||
|
-# ifdef HAVE_UTMP_HOST
|
||
|
- strncpy (ut->ut_host, host, sizeof (ut->ut_host));
|
||
|
-# endif
|
||
|
- }
|
||
|
-}
|
||
|
-#endif
|
||
|
-
|
||
|
-#ifdef HAVE_STRUCT_UTMPX
|
||
|
-static void
|
||
|
-fill_utmpx (struct utmpx *utx, bool login, int pid, const char *line, const char *user, const char *host)
|
||
|
-{
|
||
|
- memset (utx, 0, sizeof (struct utmpx));
|
||
|
-
|
||
|
- // posix says that ut_line is not meaningful for DEAD_PROCESS
|
||
|
- // records, but most implementations of last use ut_line to
|
||
|
- // associate records in wtmp file
|
||
|
- strncpy (utx->ut_line, line, sizeof (utx->ut_line));
|
||
|
- fill_id (utx->ut_id, line, sizeof (utx->ut_id));
|
||
|
- utx->ut_pid = pid;
|
||
|
- utx->ut_type = login ? USER_PROCESS : DEAD_PROCESS;
|
||
|
- utx->ut_tv.tv_sec = time (NULL);
|
||
|
- utx->ut_tv.tv_usec = 0;
|
||
|
-
|
||
|
- // posix says that ut_user is not meaningful for DEAD_PROCESS
|
||
|
- // records, but solaris utmp_update helper requires that the ut_user
|
||
|
- // field of a DEAD_PROCESS entry matches the one of an existing
|
||
|
- // USER_PROCESS entry for the same line, if any
|
||
|
- strncpy (utx->ut_user, user, sizeof (utx->ut_user));
|
||
|
-
|
||
|
- if (login)
|
||
|
- {
|
||
|
-# ifdef HAVE_UTMPX_HOST
|
||
|
- strncpy (utx->ut_host, host, sizeof (utx->ut_host));
|
||
|
-# endif
|
||
|
- }
|
||
|
-}
|
||
|
-#endif
|
||
|
-
|
||
|
-/* ------------------------------------------------------------------------- */
|
||
|
-
|
||
|
-/*
|
||
|
- * make and write utmp and wtmp entries
|
||
|
- */
|
||
|
void
|
||
|
ptytty_unix::login (int cmd_pid, bool login_shell, const char *hostname)
|
||
|
{
|
||
|
@@ -290,97 +47,17 @@
|
||
|
this->cmd_pid = cmd_pid;
|
||
|
this->login_shell = login_shell;
|
||
|
|
||
|
- log_session (true, hostname);
|
||
|
-}
|
||
|
-
|
||
|
-void
|
||
|
-ptytty_unix::log_session (bool login, const char *hostname)
|
||
|
-{
|
||
|
- struct passwd *pwent = getpwuid (getuid ());
|
||
|
- const char *user = (pwent && pwent->pw_name) ? pwent->pw_name : "?";
|
||
|
-
|
||
|
- const char *pty = name;
|
||
|
-
|
||
|
- if (!strncmp (pty, "/dev/", 5))
|
||
|
- pty += 5; /* skip /dev/ prefix */
|
||
|
-
|
||
|
-#ifdef HAVE_STRUCT_UTMP
|
||
|
- struct utmp *tmput;
|
||
|
- struct utmp ut;
|
||
|
- fill_utmp (&ut, login, cmd_pid, pty, user, hostname);
|
||
|
-#endif
|
||
|
-
|
||
|
-#ifdef HAVE_STRUCT_UTMPX
|
||
|
- struct utmpx *tmputx;
|
||
|
- struct utmpx utx;
|
||
|
- fill_utmpx (&utx, login, cmd_pid, pty, user, hostname);
|
||
|
-#endif
|
||
|
-
|
||
|
-#ifdef HAVE_STRUCT_UTMP
|
||
|
-# ifdef HAVE_UTMP_PID
|
||
|
- setutent ();
|
||
|
- if (login || ((tmput = getutid (&ut)) && tmput->ut_pid == cmd_pid))
|
||
|
- pututline (&ut);
|
||
|
- endutent ();
|
||
|
-# else
|
||
|
- write_bsd_utmp (utmp_pos, &ut);
|
||
|
-# endif
|
||
|
-#endif
|
||
|
-
|
||
|
-#ifdef HAVE_STRUCT_UTMPX
|
||
|
- setutxent ();
|
||
|
- if (login || ((tmputx = getutxid (&utx)) && tmputx->ut_pid == cmd_pid))
|
||
|
- pututxline (&utx);
|
||
|
- endutxent ();
|
||
|
-#endif
|
||
|
-
|
||
|
-#ifdef WTMP_SUPPORT
|
||
|
- if (login_shell)
|
||
|
- {
|
||
|
-# ifdef HAVE_STRUCT_UTMP
|
||
|
-# ifdef HAVE_UPDWTMP
|
||
|
- updwtmp (WTMP_FILE, &ut);
|
||
|
-# else
|
||
|
- update_wtmp (WTMP_FILE, &ut);
|
||
|
-# endif
|
||
|
-# endif
|
||
|
-# if defined(HAVE_STRUCT_UTMPX) && defined(HAVE_UPDWTMPX)
|
||
|
- updwtmpx (WTMPX_FILE, &utx);
|
||
|
-# endif
|
||
|
- }
|
||
|
-#endif
|
||
|
-
|
||
|
-#ifdef LASTLOG_SUPPORT
|
||
|
- if (login_shell)
|
||
|
- if (login)
|
||
|
- {
|
||
|
- if (pwent)
|
||
|
- update_lastlog (pty, hostname);
|
||
|
- else
|
||
|
- PTYTTY_WARN ("no entry in password file, not updating lastlog.\n");
|
||
|
- }
|
||
|
-#endif
|
||
|
+ utempter_add_record(pty, hostname);
|
||
|
}
|
||
|
|
||
|
-/* ------------------------------------------------------------------------- */
|
||
|
-/*
|
||
|
- * remove utmp and wtmp entries
|
||
|
- */
|
||
|
void
|
||
|
ptytty_unix::logout ()
|
||
|
{
|
||
|
if (!cmd_pid)
|
||
|
return;
|
||
|
|
||
|
- log_session (false, 0);
|
||
|
+ utempter_remove_record(pty);
|
||
|
|
||
|
cmd_pid = 0;
|
||
|
}
|
||
|
|
||
|
-#else
|
||
|
-void
|
||
|
-ptytty_unix::login (int cmd_pid, bool login_shell, const char *hostname)
|
||
|
-{
|
||
|
-}
|
||
|
-#endif
|
||
|
-
|
||
|
--- ./src/Makefile.in.orig 2016-01-23 14:09:22.000000000 -0600
|
||
|
+++ ./src/Makefile.in 2018-03-31 11:21:43.963399092 -0500
|
||
|
@@ -64,10 +64,10 @@
|
||
|
all: allbin
|
||
|
|
||
|
rxvt: rxvt.o $(COMMON)
|
||
|
- $(LINK) -o $@ rxvt.o $(COMMON) $(LIBS) $(XLIB) $(PERLLIB)
|
||
|
+ $(LINK) -o $@ rxvt.o $(COMMON) $(LIBS) $(XLIB) $(PERLLIB) -lutempter
|
||
|
|
||
|
rxvtd: rxvtd.o $(COMMON) $(COMMON_DAEMON)
|
||
|
- $(LINK) -o $@ rxvtd.o $(COMMON) $(COMMON_DAEMON) $(LIBS) $(XLIB) $(PERLLIB)
|
||
|
+ $(LINK) -o $@ rxvtd.o $(COMMON) $(COMMON_DAEMON) $(LIBS) $(XLIB) $(PERLLIB) -lutempter
|
||
|
|
||
|
rxvtc: rxvtc.o $(COMMON_DAEMON) fdpass_wrapper.o
|
||
|
$(LINK) -o $@ rxvtc.o $(COMMON_DAEMON) fdpass_wrapper.o $(LIBS)
|
||
|
@@ -205,7 +205,7 @@
|
||
|
ptytty_wrapper.o: ../libptytty/src/libptytty.h rxvtperl.h hookinc.h rsinc.h
|
||
|
ptytty_wrapper.o: optinc.h ../libptytty/src/logging.C
|
||
|
ptytty_wrapper.o: ../libptytty/src/ptytty.h ../libptytty/src/ptytty_conf.h
|
||
|
-ptytty_wrapper.o: ../libptytty/src/proxy.C ../libptytty/src/ptytty.C
|
||
|
+ptytty_wrapper.o: ../libptytty/src/ptytty.C
|
||
|
rxvt.o: ../config.h rxvt.h feature.h ../libptytty/src/ecb.h encoding.h
|
||
|
rxvt.o: rxvtutil.h ../libptytty/src/estl.h emman.h rxvtfont.h rxvttoolkit.h
|
||
|
rxvt.o: ev_cpp.h ../config.h ../libev/ev++.h ../libev/ev.h callback.h
|
||
|
--- ./src/rxvt.C.orig 2014-12-12 19:00:23.000000000 -0600
|
||
|
+++ ./src/rxvt.C 2018-03-31 11:21:43.965399092 -0500
|
||
|
@@ -30,7 +30,7 @@
|
||
|
main (int argc, char *argv[])
|
||
|
try
|
||
|
{
|
||
|
- ptytty::init ();
|
||
|
+ ptytty::sanitise_stdfd ();
|
||
|
rxvt_init ();
|
||
|
|
||
|
rxvt_term *t = new rxvt_term;
|
||
|
--- ./src/ptytty_wrapper.C.orig 2014-12-12 19:00:23.000000000 -0600
|
||
|
+++ ./src/ptytty_wrapper.C 2018-03-31 11:21:43.961399092 -0500
|
||
|
@@ -7,5 +7,4 @@
|
||
|
#define PTYTTY_WARN rxvt_warn
|
||
|
|
||
|
#include "logging.C"
|
||
|
-#include "proxy.C"
|
||
|
#include "ptytty.C"
|
||
|
--- ./src/rxvtd.C.orig 2014-12-26 16:34:13.000000000 -0600
|
||
|
+++ ./src/rxvtd.C 2018-03-31 11:21:43.960399092 -0500
|
||
|
@@ -227,7 +227,7 @@
|
||
|
int
|
||
|
main (int argc, char *argv[])
|
||
|
{
|
||
|
- ptytty::init ();
|
||
|
+ ptytty::sanitise_stdfd ();
|
||
|
|
||
|
static char opt_fork, opt_opendisplay, opt_quiet;
|
||
|
#if ENABLE_PERL
|