Unverified Commit 24cc9c3c authored by Artturi's avatar Artturi Committed by GitHub
Browse files

Merge pull request #201183 from Artturin/utempter

tmux: build with utempter 
parents 841bcc7a 2af80901
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -178,6 +178,16 @@ in {
        description = lib.mdDoc "List of plugins to install.";
        example = lib.literalExpression "[ pkgs.tmuxPlugins.nord ]";
      };

      withUtempter = mkOption {
        description = lib.mdDoc ''
          Whether to enable libutempter for tmux.
          This is required so that tmux can write to /var/run/utmp (which can be queried with `who` to display currently connected user sessions).
          Note, this will add a guid wrapper for the group utmp!
        '';
        default = true;
        type = types.bool;
      };
    };
  };

@@ -193,6 +203,15 @@ in {
        TMUX_TMPDIR = lib.optional cfg.secureSocket ''''${XDG_RUNTIME_DIR:-"/run/user/$(id -u)"}'';
      };
    };
    security.wrappers = mkIf cfg.withUtempter {
      utempter = {
        source = "${pkgs.libutempter}/lib/utempter/utempter";
        owner = "root";
        group = "utmp";
        setuid = false;
        setgid = true;
      };
    };
  };

  imports = [
+6 −3
Original line number Diff line number Diff line
@@ -4,17 +4,19 @@ with lib;

stdenv.mkDerivation rec {
  pname = "libutempter";
  version = "1.1.6";
  version = "1.2.1";

  src = fetchurl {
    url = "mirror://ubuntu/pool/main/libu/libutempter/libutempter_${version}.orig.tar.bz2";
    sha256 = "15y3xbgznjxnfmix4xg3bwmqdvghdw7slbhazb0ybmyf65gmd65q";
    url = "http://ftp.altlinux.org/pub/people/ldv/utempter/libutempter-${version}.tar.gz";
    sha256 = "sha256-ln/vNy85HeUBhDrYdXDGz12r2WUfAPF4MJD7wSsqNMs=";
  };

  buildInputs = [ glib ];

  patches = [ ./exec_path.patch ];

  patchFlags = [ "-p2" ];

  prePatch = ''
    substituteInPlace Makefile --replace 2711 0711
  '';
@@ -27,6 +29,7 @@ stdenv.mkDerivation rec {
  ];

  meta = {
    homepage = "https://github.com/altlinux/libutempter";
    description = "Interface for terminal emulators such as screen and xterm to record user sessions to utmp and wtmp files";
    longDescription = ''
      The bundled utempter binary must be able to run as a user belonging to group utmp.
+19 −12
Original line number Diff line number Diff line
diff -ur libutempter-1.1.6/iface.c libutempter-1.1.6.patched/iface.c
--- libutempter-1.1.6/iface.c	2010-11-04 18:14:53.000000000 +0100
+++ libutempter-1.1.6.patched/iface.c	2018-06-06 15:09:11.417755549 +0200
@@ -60,9 +60,9 @@
diff --git a/libutempter/iface.c b/libutempter/iface.c
index 37c74a8..6f44c9a 100644
--- a/libutempter/iface.c
+++ b/libutempter/iface.c
@@ -43,7 +43,7 @@
        __result; }))
 #endif
 
-#define UTEMPTER_DEFAULT_PATHNAME	LIBEXECDIR "/utempter/utempter"
+#define UTEMPTER_DEFAULT_PATHNAME	"utempter"
 
 static const char *utempter_pathname;
 static int saved_fd = -1;
@@ -57,8 +57,8 @@ do_child(int master_fd, const char *path, char *const *argv)
 		_exit(EXIT_FAILURE);
 	}
 
-	execv(path, argv);
-	print_dbg("execv: %s", strerror(errno));
+	execvp(path, argv);
 #ifdef	UTEMPTER_DEBUG
-	fprintf(stderr, "libutempter: execv: %s\n", strerror(errno));
+	fprintf(stderr, "libutempter: execvp: %s\n", strerror(errno));
 #endif
+	print_dbg("execvp: %s", strerror(errno));
 
 	while (EACCES == errno)
@@ -79,7 +79,7 @@
 	while (EACCES == errno) {
 		/* try saved group ID */
@@ -73,7 +73,7 @@ do_child(int master_fd, const char *path, char *const *argv)
 		if (setgid(sgid))
 			break;
 
@@ -21,5 +30,3 @@ diff -ur libutempter-1.1.6/iface.c libutempter-1.1.6.patched/iface.c
+		(void) execvp(path, argv);
 		break;
 	}
 
Only in libutempter-1.1.6.patched: result
+4 −1
Original line number Diff line number Diff line
@@ -8,6 +8,7 @@
, pkg-config
, withSystemd ? stdenv.isLinux && !stdenv.hostPlatform.isStatic, systemd
, utf8proc
, withUtempter ? stdenv.isLinux && !stdenv.hostPlatform.isMusl, libutempter
}:

let
@@ -44,12 +45,14 @@ stdenv.mkDerivation rec {
    ncurses
    libevent
  ] ++ lib.optionals withSystemd [ systemd ]
  ++ lib.optionals stdenv.isDarwin [ utf8proc ];
  ++ lib.optionals stdenv.isDarwin [ utf8proc ]
  ++ lib.optionals withUtempter [ libutempter ];

  configureFlags = [
    "--sysconfdir=/etc"
    "--localstatedir=/var"
  ] ++ lib.optionals withSystemd [ "--enable-systemd" ]
  ++ lib.optionals withUtempter [ "--enable-utempter" ]
  ++ lib.optionals stdenv.isDarwin [ "--enable-utf8proc" ];

  enableParallelBuilding = true;
+0 −1
Original line number Diff line number Diff line
@@ -24,7 +24,6 @@ stdenv.mkDerivation rec {
  patches = [
    ./ssh_path.patch
    ./mosh-client_path.patch
    ./utempter_path.patch
    # Fix build with bash-completion 2.10
    ./bash_completion_datadir.patch
  ];
Loading