summarylogtreecommitdiffstats
path: root/0002-Remove-X-support.patch
diff options
context:
space:
mode:
Diffstat (limited to '0002-Remove-X-support.patch')
-rw-r--r--0002-Remove-X-support.patch599
1 files changed, 599 insertions, 0 deletions
diff --git a/0002-Remove-X-support.patch b/0002-Remove-X-support.patch
new file mode 100644
index 000000000000..44d4b9ae2d6f
--- /dev/null
+++ b/0002-Remove-X-support.patch
@@ -0,0 +1,599 @@
+From 45ea617f995180bf704a760709efa86401b9394a Mon Sep 17 00:00:00 2001
+From: Olivier Brunel <jjk@jjacky.com>
+Date: Tue, 15 Nov 2011 15:42:46 +0100
+Subject: [PATCH 2/8] Remove X support
+
+Signed-off-by: Olivier Brunel <jjk@jjacky.com>
+---
+ Makefile | 22 +-----
+ etc/Xresources | 5 --
+ etc/pam.d/xlshd | 8 ---
+ etc/xlshrc | 25 -------
+ include/config.h | 13 ----
+ include/xlsh.h | 1 -
+ src/xlsh.c | 113 ++-----------------------------
+ src/xlshd.c | 199 -------------------------------------------------------
+ 8 files changed, 6 insertions(+), 380 deletions(-)
+ delete mode 100644 etc/Xresources
+ delete mode 100644 etc/pam.d/xlshd
+ delete mode 100644 etc/xlshrc
+ delete mode 100644 src/xlshd.c
+
+diff --git a/Makefile b/Makefile
+index 3cabb06..8fae9a2 100644
+--- a/Makefile
++++ b/Makefile
+@@ -7,9 +7,7 @@
+ prefix = /usr/local
+
+ exec_prefix = $(prefix)
+-bindir = $(exec_prefix)/bin
+ sbindir = $(exec_prefix)/sbin
+-sysconfdir = /etc
+
+ SHELL = /bin/sh
+ INSTALL = install
+@@ -26,49 +24,33 @@ ALL_CFLAGS = -I./include $(CFLAGS) $(CMACROS)
+ .SUFFIXES: .o
+ vpath %.c ./src
+
+-PROGRAMS = xlsh xlshd
++PROGRAMS = xlsh
+
+ XLSH_OBJ = xlsh.o libxlsh.o
+ XLSH_SOURCE = xlsh.c libxlsh.c
+ XLSH_HEADERS = xlsh.h libxlsh.h config.h
+ XLSH_LIBS = -lreadline -lpam
+
+-XLSHD_OBJ = xlshd.o libxlsh.o
+-XLSHD_SOURCE = xlshd.c libxlsh.c
+-XLSHD_HEADERS = config.h libxlsh.h
+-
+ all: $(PROGRAMS)
+
+ xlsh: $(XLSH_OBJ)
+ xlsh: LDLIBS=$(XLSH_LIBS)
+
+-xlshd: $(XLSHD_OBJ)
+-
+ install: installdirs
+ $(INSTALL_PROGRAM) xlsh $(DESTDIR)$(sbindir)
+- $(INSTALL_PROGRAM) xlshd $(DESTDIR)$(sbindir)
+- $(INSTALL_DATA) etc/xlshrc $(DESTDIR)$(sysconfdir)/xlsh
+- $(INSTALL_DATA) etc/Xresources $(DESTDIR)$(sysconfdir)/xlsh
+- $(INSTALL_DATA) etc/pam.d/xlshd $(DESTDIR)$(sysconfdir)/pam.d
+
+ install-strip: installdirs
+ $(INSTALL_PROGRAM_STRIP) xlsh $(DESTDIR)$(sbindir)
+- $(INSTALL_PROGRAM_STRIP) xlshd $(DESTDIR)$(sbindir)
+- $(INSTALL_DATA) etc/xlshrc $(DESTDIR)$(sysconfdir)/xlsh
+- $(INSTALL_DATA) etc/Xresources $(DESTDIR)$(sysconfdir)/xlsh
+
+ installdirs:
+ $(INSTALL_DIR) $(DESTDIR)$(sbindir)
+- $(INSTALL_DIR) $(DESTDIR)$(sysconfdir)/xlsh
+- $(INSTALL_DIR) $(DESTDIR)$(sysconfdir)/pam.d
+
+ uninstall:
+ rm -f ${DESTDIR}$(sbindir)/xlsh
+- rm -f ${DESTDIR}$(sbindir)/xlshd
+
+ clean:
+ rm -f $(PROGRAMS)
+- rm -f $(XLSH_OBJ) $(XLSHD_OBJ)
++ rm -f $(XLSH_OBJ)
+
+ %.o: %.c
+ $(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) $< -o $@
+diff --git a/etc/Xresources b/etc/Xresources
+deleted file mode 100644
+index c2f3e0b..0000000
+--- a/etc/Xresources
++++ /dev/null
+@@ -1,5 +0,0 @@
+-! Default resources for XLSH xterm instance.
+-*foreground: #FFD7AF
+-*background: #1F1F1F
+-*cursorColor: #B99B86
+-*visualBell: off
+diff --git a/etc/pam.d/xlshd b/etc/pam.d/xlshd
+deleted file mode 100644
+index 862b83f..0000000
+--- a/etc/pam.d/xlshd
++++ /dev/null
+@@ -1,8 +0,0 @@
+-#%PAM-1.0
+-auth required pam_unix.so
+-auth required pam_nologin.so
+-auth required pam_env.so
+-account required pam_unix.so
+-password required pam_unix.so
+-session required pam_unix.so
+-session required pam_limits.so
+diff --git a/etc/xlshrc b/etc/xlshrc
+deleted file mode 100644
+index ca9fbba..0000000
+--- a/etc/xlshrc
++++ /dev/null
+@@ -1,25 +0,0 @@
+-#!/bin/sh
+-# XLSH default startup script for X11.
+-TERMINAL=xterm
+-XRESFILE=/etc/xlsh/Xresources
+-BGCOLOR="rgb:1E/23/1F"
+-
+-screen_w=$(xwininfo -root | grep Width | cut -f2 -d':')
+-screen_h=$(xwininfo -root | grep Height | cut -f2 -d':')
+-px=$(($screen_w/2 - 240))
+-py=$(($screen_h/2 - 120))
+-
+-PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin
+-export PATH
+-if ! which xlsh; then
+- xmessage -center "xlsh cannot be found in PATH!"
+- exit 1
+-fi
+-
+-xrdb -merge "$XRESFILE"
+-xsetroot -solid "$BGCOLOR"
+-if which xdotool; then
+- ( xwindow=$(xdotool search --sync --class $TERMINAL)
+- xdotool windowfocus "$xwindow" )&
+-fi
+-exec $TERMINAL -g 80x15+$px+$py -e $(which xlsh)
+diff --git a/include/config.h b/include/config.h
+index 3f6567e..ec20fc5 100644
+--- a/include/config.h
++++ b/include/config.h
+@@ -17,27 +17,14 @@
+ #define XLSH_PATH "/bin:/usr/bin:/usr/local/bin"
+ #define XLSH_REBOOT "/sbin/shutdown -r now"
+ #define XLSH_HALT "/sbin/shutdown -h now"
+-#define XLSH_XRDB "/usr/bin/xrdb -remove"
+ #define XLSH_XTTY "/dev/console"
+-#define XLSH_XTTY_NAME "X11"
+ #define XLSH_DATEFMT "%Y-%m-%d"
+ #define XLSH_TIMEFMT "%H:%M"
+ #define XLSH_PAM_TTY "login"
+-#define XLSH_PAM_X11 "xlshd"
+
+ #define XLSH_COMPLETION_LOGIN 0
+ #define XLSH_COMPLETION_SHOWROOT 1
+ #define XLSH_COMPLETION_MINUID 1000
+ #define XLSH_COMPLETION_MAXUID 65534
+
+-#define XLSHD_TMPDIR XLSH_TMPDIR
+-#define XLSHD_SHELL "/bin/sh"
+-#define XLSHD_PIDFILE "/var/run/xlshd.pid"
+-#define XLSHD_XSERVER "/usr/bin/X"
+-#define XLSHD_XOPTIONS "-nolisten tcp -noreset"
+-#define XLSHD_XDISPLAY ":0"
+-#define XLSHD_XLSHRC "/etc/xlsh/xlshrc"
+-#define XLSHD_XWAIT 1
+-#define XLSHD_XRETRY 2
+-
+ #endif
+diff --git a/include/xlsh.h b/include/xlsh.h
+index 14191ba..a536996 100644
+--- a/include/xlsh.h
++++ b/include/xlsh.h
+@@ -58,7 +58,6 @@ int xlsh_session_close(pam_handle_t* handle);
+ int xlsh_session_exec(pam_handle_t* handle, const char* session, const char* arg0);
+
+ int xlsh_session_tty(const char* user, const char* shell);
+-int xlsh_session_x(const char* user, const char* shell);
+
+ int xlsh_sys_getinfo(xlsh_system_t* sysinfo);
+ int xlsh_sys_issue(const char* issuefile);
+diff --git a/src/xlsh.c b/src/xlsh.c
+index b22b4e4..ab20703 100644
+--- a/src/xlsh.c
++++ b/src/xlsh.c
+@@ -51,7 +51,6 @@ static xlsh_command_t xlsh_commands[] = {
+ { NULL, NULL, NULL },
+ };
+
+-static int xlsh_X = 0;
+
+ static void xlsh_usage(char* argv0)
+ {
+@@ -99,18 +98,11 @@ int xlsh_func_login(int argc, char** argv)
+ return XLSH_EARG;
+ }
+
+- if(xlsh_X) {
+- if(!arg_shell)
+- arg_shell = xlsh_config[XLSH_ID_EXEC].value;
+- return xlsh_session_x(arg_user, arg_shell);
+- }
+- else
+ return xlsh_session_tty(arg_user, arg_shell);
+ }
+
+ int xlsh_func_reboot(int argc, char** argv)
+ {
+- pid_t xlshd_pid;
+
+ printf("Initiating system reboot ...\n");
+ if(libxlsh_proc_exec(XLSH_REBOOT, XLSH_DETACH) == -1) {
+@@ -118,28 +110,18 @@ int xlsh_func_reboot(int argc, char** argv)
+ return XLSH_ERROR;
+ }
+
+- xlshd_pid = libxlsh_pid_read(XLSHD_PIDFILE);
+- if(xlshd_pid > 0)
+- kill(xlshd_pid, SIGTERM);
+-
+ pause();
+ return XLSH_EDONE;
+ }
+
+ int xlsh_func_shutdown(int argc, char** argv)
+ {
+- pid_t xlshd_pid;
+-
+ printf("Initiating system shutdown ...\n");
+ if(libxlsh_proc_exec(XLSH_HALT, XLSH_DETACH) == -1) {
+ fprintf(stderr, "Failed to execute: %s\n", XLSH_HALT);
+ return XLSH_ERROR;
+ }
+
+- xlshd_pid = libxlsh_pid_read(XLSHD_PIDFILE);
+- if(xlshd_pid > 0)
+- kill(xlshd_pid, SIGTERM);
+-
+ pause();
+ return XLSH_EDONE;
+ }
+@@ -241,11 +223,7 @@ int xlsh_session_open(const char* service, const char* user,
+
+ if(pam_start(service, user, &conv, &pam_handle) != PAM_SUCCESS)
+ return XLSH_ERROR;
+-
+- if(xlsh_X)
+- pam_set_item(pam_handle, PAM_TTY, XLSH_XTTY);
+- else
+- pam_set_item(pam_handle, PAM_TTY, ttyname(0));
++ pam_set_item(pam_handle, PAM_TTY, ttyname(0));
+
+ if(pam_authenticate(pam_handle, 0) != PAM_SUCCESS) {
+ pam_end(pam_handle, 0);
+@@ -287,7 +265,6 @@ int xlsh_session_exec(pam_handle_t* handle, const char* session, const char* arg
+ const char* pwname;
+ char terminal[256];
+ pid_t proc_shell;
+- int proc_wait = 0;
+
+ const char* _arg0 = arg0;
+ if(!arg0) _arg0 = session;
+@@ -318,14 +295,7 @@ int xlsh_session_exec(pam_handle_t* handle, const char* session, const char* arg
+ setenv("HOME", pwinfo->pw_dir, 1);
+ setenv("PATH", xlsh_config[XLSH_ID_PATH].value, 1);
+
+- if(xlsh_X) {
+- setenv("SHELL", pwinfo->pw_shell, 1);
+- setenv("DISPLAY", xlsh_config[XLSH_ID_DISPLAY].value, 1);
+- if(libxlsh_proc_exec(XLSH_XRDB, 0) > 0)
+- wait(&proc_wait);
+- }
+- else
+- setenv("SHELL", session, 1);
++ setenv("SHELL", session, 1);
+
+ if(*terminal)
+ setenv("TERM", terminal, 1);
+@@ -382,70 +352,6 @@ int xlsh_session_tty(const char* user, const char* shell)
+ return XLSH_EDONE;
+ }
+
+-int xlsh_session_x(const char* user, const char* shell)
+-{
+- pid_t proc_session;
+- int proc_result;
+- char buffer[PATH_MAX];
+-
+- sigset_t sigset[2];
+- int waitflag;
+-
+- pam_handle_t* pam_handle;
+-
+- if((proc_session = fork()) == 0) {
+- if(xlsh_session_open(XLSH_PAM_X11, user, &pam_handle) != XLSH_EOK) {
+- fprintf(stderr, "Authorization failed\n");
+- exit(EXIT_FAILURE);
+- }
+-
+- setsid();
+- if(xlsh_session_exec(pam_handle, shell, NULL) != XLSH_EOK) {
+- fprintf(stderr, "Cannot execute shell process: %s\n", shell);
+- exit(EXIT_FAILURE);
+- }
+-
+- waitflag = 0;
+- kill(getppid(), SIGUSR1);
+- wait(&waitflag);
+-
+- xlsh_session_close(pam_handle);
+- exit(EXIT_SUCCESS);
+- }
+- else {
+- if(proc_session == -1) {
+- fprintf(stderr, "Could not fork child process: %s\n", strerror(errno));
+- return XLSH_ERROR;
+- }
+-
+- sigemptyset(&sigset[0]);
+- sigaddset(&sigset[0], SIGCHLD);
+- sigaddset(&sigset[0], SIGUSR1);
+- sigprocmask(SIG_BLOCK, &sigset[0], &sigset[1]);
+-
+- snprintf(buffer, PATH_MAX, "%s/.xlsh-%d.pid",
+- xlsh_config[XLSH_ID_TMPDIR].value, getppid());
+- libxlsh_pid_lock(buffer, proc_session, 1);
+-
+- proc_result = sigwaitinfo(&sigset[0], NULL);
+- sigprocmask(SIG_SETMASK, &sigset[1], NULL);
+-
+- switch(proc_result) {
+- case SIGCHLD:
+- unlink(buffer);
+- return XLSH_ERROR;
+- case SIGUSR1:
+- return XLSH_EDONE;
+- default:
+- fprintf(stderr, "wait() syscall failed for session process: %s\n",
+- strerror(errno));
+- unlink(buffer);
+- return XLSH_ERROR;
+- }
+- }
+-
+- return XLSH_EOK;
+-}
+
+ // Configuration
+ void xlsh_config_init(char* exec_arg)
+@@ -616,7 +522,7 @@ int xlsh_sys_getinfo(xlsh_system_t* sysinfo)
+ struct tm *tminfo;
+ time_t timeval;
+
+- char* disp_name, *tty_name;
++ char *tty_name;
+ char tty_path[PATH_MAX];
+
+ memset(sysinfo, 0, sizeof(xlsh_system_t));
+@@ -629,15 +535,7 @@ int xlsh_sys_getinfo(xlsh_system_t* sysinfo)
+ strcpy(tty_path, XLSH_XTTY);
+ strncpy(sysinfo->ttypath, tty_path + 5, sizeof(sysinfo->ttypath));
+
+- if(xlsh_X) {
+- disp_name = getenv("DISPLAY");
+- if(disp_name[0] == ':')
+- disp_name++;
+- sprintf(tty_path, "%s/%s", XLSH_XTTY_NAME, disp_name);
+- tty_name = tty_path;
+- }
+- else
+- tty_name = tty_path + 5;
++ tty_name = tty_path + 5;
+ strncpy(sysinfo->ttyname, tty_name, sizeof(sysinfo->ttyname));
+
+ timeval = time(NULL);
+@@ -727,9 +625,6 @@ int main(int argc, char** argv)
+ sigaddset(&sigmask, SIGHUP);
+ sigprocmask(SIG_BLOCK, &sigmask, NULL);
+
+- if(getenv("DISPLAY"))
+- xlsh_X = 1;
+-
+ xlsh_config_init(opt_exec);
+ xlsh_sys_issue(xlsh_config[XLSH_ID_ISSUE].value);
+
+diff --git a/src/xlshd.c b/src/xlshd.c
+deleted file mode 100644
+index 3c79581..0000000
+--- a/src/xlshd.c
++++ /dev/null
+@@ -1,199 +0,0 @@
+-/* eXtended Login Shell (X daemon)
+- * (c) 2011 MichaƂ Siejak
+- *
+- * See COPYING file for license details.
+- */
+-
+-#include <stdio.h>
+-#include <stdlib.h>
+-#include <memory.h>
+-#include <string.h>
+-#include <signal.h>
+-#include <unistd.h>
+-#include <errno.h>
+-#include <limits.h>
+-#include <sys/types.h>
+-#include <sys/stat.h>
+-#include <sys/wait.h>
+-
+-#include <config.h>
+-#include <libxlsh.h>
+-
+-static void xlshd_usage(const char* argv0)
+-{
+- fprintf(stderr, "eXtended Login Shell X daemon, version %s\n", XLSH_VERSION_STRING);
+- fprintf(stderr, "usage: %s [-f|-h] [display]\n", argv0);
+- exit(EXIT_FAILURE);
+-}
+-
+-static void xlshd_sig_daemonize(int signum)
+-{
+- switch(signum) {
+- case SIGALRM: exit(EXIT_FAILURE);
+- case SIGCHLD: exit(EXIT_FAILURE);
+- case SIGUSR1: exit(EXIT_SUCCESS);
+- }
+-}
+-
+-static volatile sig_atomic_t xlshd_quit = 0;
+-static void xlshd_sig_quit(int signum)
+-{
+- xlshd_quit = 1;
+-}
+-
+-void xlshd_daemonize(const char* argv0)
+-{
+- pid_t pid;
+- struct sigaction sighandler;
+- struct sigaction def_sigchld, def_sigusr1, def_sigalrm;
+-
+- memset(&sighandler, 0, sizeof(struct sigaction));
+- sighandler.sa_handler = xlshd_sig_daemonize;
+-
+- sigaction(SIGCHLD, &sighandler, &def_sigchld);
+- sigaction(SIGUSR1, &sighandler, &def_sigusr1);
+- sigaction(SIGALRM, &sighandler, &def_sigalrm);
+-
+- pid = fork();
+- if(pid < 0) {
+- fprintf(stderr, "%s: Could not daemonize: %s\n", argv0, strerror(errno));
+- exit(EXIT_FAILURE);
+- }
+- if(pid > 0) {
+- alarm(2);
+- pause();
+- exit(EXIT_FAILURE);
+- }
+-
+- sigaction(SIGCHLD, &def_sigchld, NULL);
+- sigaction(SIGUSR1, &def_sigusr1, NULL);
+- sigaction(SIGALRM, &def_sigalrm, NULL);
+-
+- umask(S_IWGRP | S_IWOTH);
+- chdir("/");
+- if(setsid() < 0)
+- exit(EXIT_FAILURE);
+-
+- kill(getppid(), SIGUSR1);
+-}
+-
+-int main(int argc, char** argv)
+-{
+- int opt_index = 1;
+- int opt_nodaemon = 0;
+-
+- const char* opt_display = XLSHD_XDISPLAY;
+-
+- char buffer[PATH_MAX];
+- pid_t xserver_pid = 0;
+- pid_t xrc_pid = 0;
+- pid_t xsession_pid = 0;
+-
+- sigset_t sigmask;
+- struct sigaction sighandler;
+- int waitflag, retval;
+-
+- if(argc > opt_index && strcmp(argv[opt_index], "-h")==0)
+- xlshd_usage(argv[0]);
+- if(argc > opt_index && strcmp(argv[opt_index], "-f")==0) {
+- opt_nodaemon = 1;
+- opt_index++;
+- }
+- if(argc > opt_index)
+- opt_display = argv[opt_index];
+-
+- if(geteuid() != 0) {
+- fprintf(stderr, "%s: You need to have root privileges\n", argv[0]);
+- return EXIT_FAILURE;
+- }
+-
+- switch(libxlsh_pid_lock(XLSHD_PIDFILE, getpid(), 0)) {
+- case XLSH_EFOUND:
+- fprintf(stderr, "%s: Pidfile %s exists, aborted\n",
+- argv[0], XLSHD_PIDFILE);
+- return EXIT_FAILURE;
+- case XLSH_ERROR:
+- fprintf(stderr, "%s: Cannot create pidfile: %s\n",
+- argv[0], XLSHD_PIDFILE);
+- return EXIT_FAILURE;
+- }
+-
+- if(!opt_nodaemon) {
+- xlshd_daemonize(argv[0]);
+- libxlsh_pid_lock(XLSHD_PIDFILE, getpid(), XLSH_OVERWRITE);
+- }
+-
+- stdin = freopen("/dev/null", "r", stdin);
+- stdout = freopen("/dev/null", "w", stdout);
+- stderr = freopen("/dev/null", "w", stderr);
+-
+- libxlsh_proc_sigmask();
+-
+- sigemptyset(&sigmask);
+- sigaddset(&sigmask, SIGHUP);
+- sigaddset(&sigmask, SIGUSR1);
+- sigaddset(&sigmask, SIGUSR2);
+- sigprocmask(SIG_BLOCK, &sigmask, NULL);
+-
+- memset(&sighandler, 0, sizeof(struct sigaction));
+- sighandler.sa_handler = xlshd_sig_quit;
+- sigaction(SIGTERM, &sighandler, NULL);
+- sigaction(SIGINT, &sighandler, NULL);
+-
+- retval = EXIT_SUCCESS;
+- while(!xlshd_quit) {
+- xserver_pid = 0;
+- xsession_pid = 0;
+- xrc_pid = 0;
+-
+- snprintf(buffer, PATH_MAX, "%s %s %s", XLSHD_XSERVER, XLSHD_XOPTIONS, opt_display);
+- if((xserver_pid = libxlsh_proc_exec(buffer, 0)) < 0) {
+- retval = EXIT_FAILURE;
+- break;
+- }
+-
+- setenv("DISPLAY", opt_display, 1);
+- sleep(XLSHD_XWAIT);
+-
+- snprintf(buffer, PATH_MAX, "%s %s", XLSHD_SHELL, XLSHD_XLSHRC);
+- if((xrc_pid = libxlsh_proc_exec(buffer, 0)) < 0) {
+- kill(xserver_pid, SIGTERM);
+- retval = EXIT_FAILURE;
+- break;
+- }
+-
+- waitflag = 1;
+- waitpid(xrc_pid, &waitflag, 0);
+- if(xlshd_quit) break;
+-
+- snprintf(buffer, PATH_MAX, "%s/.xlsh-%d.pid", XLSHD_TMPDIR, xrc_pid);
+- xsession_pid = libxlsh_pid_read(buffer);
+- if(xsession_pid > 0) {
+- while(!kill(xsession_pid, 0) && !xlshd_quit)
+- sleep(XLSHD_XWAIT);
+- unlink(buffer);
+- }
+-
+- if(xlshd_quit) break;
+-
+- waitflag = -1;
+- kill(xserver_pid, SIGTERM);
+- wait(&waitflag);
+- sleep(XLSHD_XRETRY);
+- }
+-
+- if(xsession_pid > 0) {
+- kill(xsession_pid, SIGTERM);
+- sleep(XLSHD_XWAIT);
+- }
+- if(xrc_pid > 0)
+- kill(xrc_pid, SIGTERM);
+- if(xserver_pid > 0) {
+- waitflag = -1;
+- kill(xserver_pid, SIGTERM);
+- wait(&waitflag);
+- }
+-
+- unlink(XLSHD_PIDFILE);
+- return retval;
+-}
+--
+2.1.3
+