From c7254419240e8d95c12212f2410637e10b6da7d7 Mon Sep 17 00:00:00 2001 From: Nikita Ermakov Date: Sat, 2 Dec 2023 23:12:43 -0600 Subject: [PATCH] New package: consolelocker-1.1.0 --- srcpkgs/consolelocker/files/consolelocker.8 | 47 +++++ .../consolelocker/files/consolelockerd/run | 3 + .../patches/0001-Port-to-musl-libc.patch | 169 ++++++++++++++++++ srcpkgs/consolelocker/template | 27 +++ 4 files changed, 246 insertions(+) create mode 100644 srcpkgs/consolelocker/files/consolelocker.8 create mode 100755 srcpkgs/consolelocker/files/consolelockerd/run create mode 100644 srcpkgs/consolelocker/patches/0001-Port-to-musl-libc.patch create mode 100644 srcpkgs/consolelocker/template diff --git a/srcpkgs/consolelocker/files/consolelocker.8 b/srcpkgs/consolelocker/files/consolelocker.8 new file mode 100644 index 0000000000000..e16aa6a5c479f --- /dev/null +++ b/srcpkgs/consolelocker/files/consolelocker.8 @@ -0,0 +1,47 @@ +.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.49.2. +.TH \FBCONSOLELOCKER\FR "8" "August 2023" "consolelocker version 1.0.0" "System Administration Utilities" +.SH NAME +\fBconsolelocker\fR \- virtual console lock daemon +.SH SYNOPSIS +.B consolelocker +[\fI\,OPTIONS\/\fR] +.SH DESCRIPTION +This is a program to lock sessions on the Linux console +and virtual consoles. After startup it open FIFO to read +events from console user. +This program is simple wrapper for vlock(1). +.SH OPTIONS +.TP +\fB\-g\fR, \fB\-\-group\fR=\fI\,NAME\/\fR +make socket group writable +.TP +\fB\-p\fR, \fB\-\-pidfile\fR=\fI\,FILE\/\fR +pidfile location; +.TP +\fB\-l\fR, \fB\-\-loglevel\fR=\fI\,LVL\/\fR +set logging level; +.TP +\fB\-f\fR, \fB\-\-foreground\fR +stay in the foreground; +.TP +\fB\-V\fR, \fB\-\-version\fR +print program version and exit. +.TP +\fB\-h\fR, \fB\-\-help\fR +output a brief help message. +.SH FILES +.TP +.I /var/run/consolelocker +.TP +\fI/var/run/consolelocker.pid +.SH AUTHOR +Written by Alexey Gladkov +.SH COPYRIGHT +Copyright \(co 2006\-2018 Alexey Gladkov +.PP +.br +This is free software; see the source for copying conditions. +There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +.SH "SEE ALSO" +.BR vlock (1), +.BR pam_console (8). diff --git a/srcpkgs/consolelocker/files/consolelockerd/run b/srcpkgs/consolelocker/files/consolelockerd/run new file mode 100755 index 0000000000000..aed511823193b --- /dev/null +++ b/srcpkgs/consolelocker/files/consolelockerd/run @@ -0,0 +1,3 @@ +#!/bin/sh +exec 2>&1 +exec consolelocker -g wheel -f diff --git a/srcpkgs/consolelocker/patches/0001-Port-to-musl-libc.patch b/srcpkgs/consolelocker/patches/0001-Port-to-musl-libc.patch new file mode 100644 index 0000000000000..8e7f009e21279 --- /dev/null +++ b/srcpkgs/consolelocker/patches/0001-Port-to-musl-libc.patch @@ -0,0 +1,169 @@ +From eb6b7f701e4a5206844ac4597d848ce38bd79798 Mon Sep 17 00:00:00 2001 +From: Nikita Ermakov +Date: Sun, 10 Dec 2023 20:52:24 -0600 +Subject: [PATCH] Port to musl libc + +--- + consolelocker.c | 26 ++++++++++++++++++++++++-- + pidfile.c | 1 + + sockets.h | 9 +++++++++ + vlocka.c | 15 +++++++++++++-- + xmalloc.c | 7 ++++++- + 5 files changed, 53 insertions(+), 5 deletions(-) + +diff --git a/consolelocker.c b/consolelocker.c +index 53282cc..0c4bc64 100644 +--- a/consolelocker.c ++++ b/consolelocker.c +@@ -42,8 +42,17 @@ + #include + #include + #include +-#include +- ++#ifdef __GLIBC__ ++# include ++#else // Consider musl ++# define program_invocation_short_name __progname ++extern char *__progname; ++// logging.h defined err() function thus let's not use err.h from musl and ++// define our error() function which will use verr() from musl. ++# include ++_Noreturn void verr(int status, const char *fmt, va_list ap); ++_Noreturn static void error(int status, int errnum __attribute__((unused)), const char *fmt, ...); ++#endif + #include "logging.h" + #include "pidfile.h" + #include "epoll.h" +@@ -75,6 +84,15 @@ static struct option long_options[] = { + { 0, 0, 0, 0 } + }; + ++#ifndef __GLIBC__ ++_Noreturn static void error(int status, int errnum __attribute__((unused)), const char *fmt, ...) { ++ va_list ap; ++ va_start(ap, fmt); ++ verr(status, fmt, ap); ++ va_end(ap); ++} ++#endif ++ + static void __attribute__((noreturn)) + print_help(int ret) + { +@@ -106,11 +124,13 @@ print_version(void) + exit(EXIT_SUCCESS); + } + ++#ifdef __GLIBC__ + static void + my_error_print_progname(void) + { + fprintf(stderr, "%s: ", program_invocation_short_name); + } ++#endif + + static int + handle_signal(uint32_t signo) +@@ -225,7 +245,9 @@ int main(int argc, char **argv) + int fd_signal = -1; + int fd_conn = -1; + ++#ifdef __GLIBC__ + error_print_progname = my_error_print_progname; ++#endif + + while ((i = getopt_long(argc, argv, "fhVg:p:l:", long_options, NULL)) != -1) { + switch (i) { +diff --git a/pidfile.c b/pidfile.c +index bf135e7..bc10606 100644 +--- a/pidfile.c ++++ b/pidfile.c +@@ -31,6 +31,7 @@ + #include + #include + #include ++#include + + #include "pidfile.h" + +diff --git a/sockets.h b/sockets.h +index d39b7a1..b6ad873 100644 +--- a/sockets.h ++++ b/sockets.h +@@ -17,6 +17,15 @@ + #ifndef _SOCKETS_H_ + #define _SOCKETS_H_ + ++#ifndef __GLIBC__ ++# define TEMP_FAILURE_RETRY(expression) \ ++ (__extension__ \ ++ ({ long int __result; \ ++ do __result = (long int) (expression); \ ++ while (__result == -1L && errno == EINTR); \ ++ __result; })) ++#endif ++ + int unix_listen(const char *, const char *); + int unix_connect(const char *, const char *); + +diff --git a/vlocka.c b/vlocka.c +index ffadec7..5750a0d 100644 +--- a/vlocka.c ++++ b/vlocka.c +@@ -28,13 +28,22 @@ + #include + #include + #include +-#include +- ++#ifdef __GLIBC__ ++# include ++#else // Consider musl ++# define program_invocation_short_name __progname ++extern char *__progname; ++# include ++# define error(status, errnum, ...) err(status, __VA_ARGS__) ++#endif ++ ++#ifdef __GLIBC__ + static void + my_error_print_progname(void) + { + fprintf(stderr, "%s: ", program_invocation_short_name); + } ++#endif + + static inline void + clear(void) +@@ -66,7 +75,9 @@ main(int argc, char ** argv) + int noclear = 0; + struct passwd *pw = NULL; + ++#ifdef __GLIBC__ + error_print_progname = my_error_print_progname; ++#endif + + if (argc < 2) + error(EXIT_FAILURE, 0, "Usage: %s ", program_invocation_short_name); +diff --git a/xmalloc.c b/xmalloc.c +index 4c57d18..e4874f3 100644 +--- a/xmalloc.c ++++ b/xmalloc.c +@@ -21,7 +21,12 @@ + #include + #include + #include +-#include ++#ifdef __GLIBC__ ++# include ++#else ++# include ++# define error(status, errnum, ...) err(status, __VA_ARGS__) ++#endif + #include + + #include "xmalloc.h" +-- +2.42.0 + diff --git a/srcpkgs/consolelocker/template b/srcpkgs/consolelocker/template new file mode 100644 index 0000000000000..23dac5c13653b --- /dev/null +++ b/srcpkgs/consolelocker/template @@ -0,0 +1,27 @@ +# Template file for 'consolelocker' +pkgname=consolelocker +version=1.1.0 +revision=1 +build_style=gnu-makefile +# Disable manpage generation for now as the program uses help2man(1) to +# generate a man page. help2man(1) executes binary to get the help message. +# This causes issues with cross compiled binaries. It could be solved by using +# binfmt but let's bundle the manpage. +make_build_args="MAN8PAGES=" +depends=kbd +short_desc="Lock sessions on the Linux console and virtual consoles" +maintainer="Nikita Ermakov " +license="GPL-2.0-or-later" +homepage="https://github.com/legionus/consolelocker" +distfiles="https://github.com/legionus/consolelocker/archive/refs/tags/${version}-alt1.tar.gz" +checksum="a26ce14bcecbe909743766cbc040afc673534300b2c21dc86c936fad9026f94d" + +do_install() { + vbin consolelock + vbin consolelocker + # Helper program and script + vmkdir usr/libexec/consolelocker 755 + vinstall vlocka 700 usr/libexec/consolelocker/ + vman "${FILESDIR}/consolelocker.8" + vsv consolelockerd +}