summarylogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.SRCINFO19
-rw-r--r--PKGBUILD34
-rw-r--r--patch340
-rw-r--r--xlsh.install19
4 files changed, 412 insertions, 0 deletions
diff --git a/.SRCINFO b/.SRCINFO
new file mode 100644
index 000000000000..cd71a8e6da1c
--- /dev/null
+++ b/.SRCINFO
@@ -0,0 +1,19 @@
+pkgbase = xlsh-without-x
+ pkgdesc = eXtended Login Shell - fast, minimalistic login replacement (without X support)
+ pkgver = 0.2.2
+ pkgrel = 1
+ url = https://github.com/Nadrin/xlsh/wiki
+ install = xlsh.install
+ arch = i686
+ arch = x86_64
+ license = GPL3
+ depends = pam
+ depends = readline
+ provides = xlsh=0.2.2
+ source = https://github.com/Nadrin/xlsh/tarball/master
+ source = patch
+ md5sums = cf78ceec269cc3e35797fe6e8631c3b3
+ md5sums = bf4e6b42787da0988ae56456d1246937
+
+pkgname = xlsh-without-x
+
diff --git a/PKGBUILD b/PKGBUILD
new file mode 100644
index 000000000000..8776a9543ae9
--- /dev/null
+++ b/PKGBUILD
@@ -0,0 +1,34 @@
+# Maintainer: jjacky
+# Contributor: MichaƂ Siejak <my_fistname@my_lastname.pl>
+pkgname=xlsh-without-x
+pkgver=0.2.2
+pkgrel=1
+pkgdesc="eXtended Login Shell - fast, minimalistic login replacement (without X support)"
+arch=('i686' 'x86_64')
+url="https://github.com/Nadrin/xlsh/wiki"
+license=('GPL3')
+depends=('pam' 'readline')
+provides=('xlsh=0.2.2')
+source=(https://github.com/Nadrin/xlsh/tarball/master
+ patch)
+install=xlsh.install
+
+build() {
+ cd "$srcdir"
+
+ folder=$(ls |grep Nadrin)
+ mv $folder/* .
+ rmdir $folder
+
+ patch -p1 -i patch
+
+ make
+}
+
+package() {
+ cd "$srcdir"
+ make DESTDIR="$pkgdir" install
+}
+
+md5sums=('cf78ceec269cc3e35797fe6e8631c3b3'
+ 'bf4e6b42787da0988ae56456d1246937')
diff --git a/patch b/patch
new file mode 100644
index 000000000000..819ad807acb5
--- /dev/null
+++ b/patch
@@ -0,0 +1,340 @@
+diff -r c2c082c4832e Makefile
+--- a/Makefile Tue Nov 15 13:02:40 2011 +0100
++++ b/Makefile Fri Nov 18 10:31:51 2011 +0100
+@@ -4,7 +4,7 @@
+ .DEFAULT_GOAL = all
+ .PHONY: all install install-strip installdirs uninstall clean
+
+-prefix = /usr/local
++prefix = /usr
+
+ exec_prefix = $(prefix)
+ bindir = $(exec_prefix)/bin
+@@ -26,49 +26,33 @@
+ .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 -r c2c082c4832e include/config.h
+--- a/include/config.h Tue Nov 15 13:02:40 2011 +0100
++++ b/include/config.h Fri Nov 18 10:31:51 2011 +0100
+@@ -9,26 +9,36 @@
+
+ // Tweak parameters to suit your needs before compiling.
+
++#define XLSH_X_SUPPORT 0
++
+ #define XLSH_EXEC "./.xsession"
+-#define XLSH_PROMPT "xlsh (%s)> "
++#define XLSH_PROMPT "> "
+ #define XLSH_TMPDIR "/tmp"
+ #define XLSH_SHELLS "/etc/shells"
+ #define XLSH_ISSUE "/etc/issue"
+ #define XLSH_PATH "/bin:/usr/bin:/usr/local/bin"
+ #define XLSH_REBOOT "/sbin/shutdown -r now"
+ #define XLSH_HALT "/sbin/shutdown -h now"
++#if XLSH_X_SUPPORT
+ #define XLSH_XRDB "/usr/bin/xrdb -remove"
++#endif
+ #define XLSH_XTTY "/dev/console"
++#if XLSH_X_SUPPORT
+ #define XLSH_XTTY_NAME "X11"
++#endif
+ #define XLSH_DATEFMT "%Y-%m-%d"
+ #define XLSH_TIMEFMT "%H:%M"
+ #define XLSH_PAM_TTY "login"
++#if XLSH_X_SUPPORT
+ #define XLSH_PAM_X11 "xlshd"
++#endif
+
++#define XLSH_COMPLETION_LOGIN 0
+ #define XLSH_COMPLETION_SHOWROOT 1
+ #define XLSH_COMPLETION_MINUID 1000
+ #define XLSH_COMPLETION_MAXUID 65534
+
++#if XLSH_X_SUPPORT
+ #define XLSHD_TMPDIR XLSH_TMPDIR
+ #define XLSHD_SHELL "/bin/sh"
+ #define XLSHD_PIDFILE "/var/run/xlshd.pid"
+@@ -38,5 +48,6 @@
+ #define XLSHD_XLSHRC "/etc/xlsh/xlshrc"
+ #define XLSHD_XWAIT 1
+ #define XLSHD_XRETRY 2
++#endif
+
+ #endif
+diff -r c2c082c4832e include/libxlsh.h
+--- a/include/libxlsh.h Tue Nov 15 13:02:40 2011 +0100
++++ b/include/libxlsh.h Fri Nov 18 10:31:51 2011 +0100
+@@ -24,6 +24,7 @@
+
+ size_t libxlsh_strnlen(const char* s, size_t maxlen);
+ void libxlsh_proc_sigmask(void);
++void libxlsh_restore_sigmask(void);
+ pid_t libxlsh_proc_exec(const char* cmdline, int flags);
+ pid_t libxlsh_pid_read(const char* filename);
+ int libxlsh_pid_lock(const char* filename, pid_t pid, int flags);
+diff -r c2c082c4832e include/xlsh.h
+--- a/include/xlsh.h Tue Nov 15 13:02:40 2011 +0100
++++ b/include/xlsh.h Fri Nov 18 10:31:51 2011 +0100
+@@ -58,7 +58,9 @@
+ int xlsh_session_exec(pam_handle_t* handle, const char* session, const char* arg0);
+
+ int xlsh_session_tty(const char* user, const char* shell);
++#if XLSH_X_SUPPORT
+ int xlsh_session_x(const char* user, const char* shell);
++#endif
+
+ int xlsh_sys_getinfo(xlsh_system_t* sysinfo);
+ int xlsh_sys_issue(const char* issuefile);
+diff -r c2c082c4832e src/libxlsh.c
+--- a/src/libxlsh.c Tue Nov 15 13:02:40 2011 +0100
++++ b/src/libxlsh.c Fri Nov 18 10:31:51 2011 +0100
+@@ -32,6 +32,11 @@
+ sigprocmask(0, NULL, &xlsh_default_sigmask);
+ }
+
++void libxlsh_restore_sigmask(void)
++{
++ sigprocmask(SIG_SETMASK, &xlsh_default_sigmask, NULL);
++}
++
+ pid_t libxlsh_proc_exec(const char* cmdline, int flags)
+ {
+ pid_t pid;
+diff -r c2c082c4832e src/xlsh.c
+--- a/src/xlsh.c Tue Nov 15 13:02:40 2011 +0100
++++ b/src/xlsh.c Fri Nov 18 10:31:51 2011 +0100
+@@ -51,7 +51,9 @@
+ { NULL, NULL, NULL },
+ };
+
++#if XLSH_X_SUPPORT
+ static int xlsh_X = 0;
++#endif
+
+ static void xlsh_usage(char* argv0)
+ {
+@@ -99,18 +101,22 @@
+ return XLSH_EARG;
+ }
+
++#if XLSH_X_SUPPORT
+ if(xlsh_X) {
+ if(!arg_shell)
+ arg_shell = xlsh_config[XLSH_ID_EXEC].value;
+ return xlsh_session_x(arg_user, arg_shell);
+ }
+ else
++#endif
+ return xlsh_session_tty(arg_user, arg_shell);
+ }
+
+ int xlsh_func_reboot(int argc, char** argv)
+ {
++#if XLSH_X_SUPPORT
+ pid_t xlshd_pid;
++#endif
+
+ printf("Initiating system reboot ...\n");
+ if(libxlsh_proc_exec(XLSH_REBOOT, XLSH_DETACH) == -1) {
+@@ -118,28 +124,34 @@
+ return XLSH_ERROR;
+ }
+
++#if XLSH_X_SUPPORT
+ xlshd_pid = libxlsh_pid_read(XLSHD_PIDFILE);
+ if(xlshd_pid > 0)
+ kill(xlshd_pid, SIGTERM);
+-
++#endif
++
+ pause();
+ return XLSH_EDONE;
+ }
+
+ int xlsh_func_shutdown(int argc, char** argv)
+ {
++#if XLSH_X_SUPPORT
+ pid_t xlshd_pid;
+-
++#endif
++
+ 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;
+ }
+
++#if XLSH_X_SUPPORT
+ xlshd_pid = libxlsh_pid_read(XLSHD_PIDFILE);
+ if(xlshd_pid > 0)
+ kill(xlshd_pid, SIGTERM);
+-
++#endif
++
+ pause();
+ return XLSH_EDONE;
+ }
+@@ -242,9 +254,11 @@
+ if(pam_start(service, user, &conv, &pam_handle) != PAM_SUCCESS)
+ return XLSH_ERROR;
+
++#if XLSH_X_SUPPORT
+ if(xlsh_X)
+ pam_set_item(pam_handle, PAM_TTY, XLSH_XTTY);
+ else
++#endif
+ pam_set_item(pam_handle, PAM_TTY, ttyname(0));
+
+ if(pam_authenticate(pam_handle, 0) != PAM_SUCCESS) {
+@@ -318,6 +332,7 @@
+ setenv("HOME", pwinfo->pw_dir, 1);
+ setenv("PATH", xlsh_config[XLSH_ID_PATH].value, 1);
+
++#if XLSH_X_SUPPORT
+ if(xlsh_X) {
+ setenv("SHELL", pwinfo->pw_shell, 1);
+ setenv("DISPLAY", xlsh_config[XLSH_ID_DISPLAY].value, 1);
+@@ -325,11 +340,13 @@
+ wait(&proc_wait);
+ }
+ else
++#endif
+ setenv("SHELL", session, 1);
+
+ if(*terminal)
+ setenv("TERM", terminal, 1);
+
++ libxlsh_restore_sigmask();
+ execlp(session, _arg0, (char*)0);
+ exit(EXIT_FAILURE);
+ }
+@@ -382,6 +399,7 @@
+ return XLSH_EDONE;
+ }
+
++#if XLSH_X_SUPPORT
+ int xlsh_session_x(const char* user, const char* shell)
+ {
+ pid_t proc_session;
+@@ -446,6 +464,7 @@
+
+ return XLSH_EOK;
+ }
++#endif
+
+ // Configuration
+ void xlsh_config_init(char* exec_arg)
+@@ -516,6 +535,7 @@
+ return NULL;
+ }
+
++#if XLSH_COMPLETION_LOGIN
+ static char* xlsh_cmd_match_user(const char* text, int state)
+ {
+ static size_t len;
+@@ -540,6 +560,7 @@
+ endpwent();
+ return NULL;
+ }
++#endif
+
+ static char** xlsh_cmd_complete(const char* text, int start, int end)
+ {
+@@ -552,8 +573,12 @@
+ return rl_completion_matches(const_cast.c,
+ xlsh_cmd_match_command);
+ else
++#if XLSH_COMPLETION_LOGIN
+ return rl_completion_matches(const_cast.c,
+ xlsh_cmd_match_user);
++#else
++ return NULL;
++#endif
+ }
+
+ int xlsh_cmd_loop(void)
+@@ -569,7 +594,7 @@
+ int retvalue = XLSH_EOK;
+
+ xlsh_sys_getinfo(&sysinfo);
+- snprintf(prompt, 256, XLSH_PROMPT, sysinfo.ttyname);
++ snprintf(prompt, 256, XLSH_PROMPT);
+
+ rl_attempted_completion_function = xlsh_cmd_complete;
+ while((line = xlsh_cmd_readline(prompt))) {
+@@ -623,6 +648,7 @@
+ strcpy(tty_path, XLSH_XTTY);
+ strncpy(sysinfo->ttypath, tty_path + 5, sizeof(sysinfo->ttypath));
+
++#if XLSH_X_SUPPORT
+ if(xlsh_X) {
+ disp_name = getenv("DISPLAY");
+ if(disp_name[0] == ':')
+@@ -631,6 +657,7 @@
+ tty_name = tty_path;
+ }
+ else
++#endif
+ tty_name = tty_path + 5;
+ strncpy(sysinfo->ttyname, tty_name, sizeof(sysinfo->ttyname));
+
+@@ -721,8 +748,10 @@
+ sigaddset(&sigmask, SIGHUP);
+ sigprocmask(SIG_BLOCK, &sigmask, NULL);
+
++#if XLSH_X_SUPPORT
+ if(getenv("DISPLAY"))
+ xlsh_X = 1;
++#endif
+
+ xlsh_config_init(opt_exec);
+ xlsh_sys_issue(xlsh_config[XLSH_ID_ISSUE].value);
diff --git a/xlsh.install b/xlsh.install
new file mode 100644
index 000000000000..c8dc33318b19
--- /dev/null
+++ b/xlsh.install
@@ -0,0 +1,19 @@
+# xlsh post-install info
+post_install() {
+ cat <<EOF
+
+To use xlsh as /bin/login replacement edit /etc/inittab file and replace
+your usual agetty invocations with:
+
+c1:2345:respawn:/sbin/agetty -8 -s 38400 -n -l /usr/sbin/xlsh tty1 linux
+c2:2345:respawn:/sbin/agetty -8 -s 38400 -n -l /usr/sbin/xlsh tty2 linux
+c3:2345:respawn:/sbin/agetty -8 -s 38400 -n -l /usr/sbin/xlsh tty3 linux
+c4:2345:respawn:/sbin/agetty -8 -s 38400 -n -l /usr/sbin/xlsh tty4 linux
+c5:2345:respawn:/sbin/agetty -8 -s 38400 -n -l /usr/sbin/xlsh tty5 linux
+c6:2345:respawn:/sbin/agetty -8 -s 38400 -n -l /usr/sbin/xlsh tty6 linux
+
+For more information see:
+ https://github.com/Nadrin/xlsh/wiki/Arch-Installation
+
+EOF
+}