aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Christian Hesse <mail@eworm.de>2013-12-20 11:50:21 +0100
committerGravatar Christian Hesse <mail@eworm.de>2013-12-20 11:50:21 +0100
commit63d42efc9dc3f5cf13856cf08aaa807bfd8982e5 (patch)
tree4f6eabe0c281f6acc748c4a7e6cc879477dcd28d
parentdd04fc241d46541704b3223b9df93d83a5575e27 (diff)
downloadnullshell-63d42efc9dc3f5cf13856cf08aaa807bfd8982e5.tar.gz
nullshell-63d42efc9dc3f5cf13856cf08aaa807bfd8982e5.tar.zst
initial commit
-rw-r--r--.gitignore1
-rw-r--r--Makefile14
-rw-r--r--README.md45
-rw-r--r--nullshell.c47
4 files changed, 106 insertions, 1 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..55457e0
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+nullshell
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..5a12c27
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,14 @@
+PREFIX := /usr
+CC := gcc
+INSTALL := install
+RM := rm
+CFLAGS += -O2 -Wall -Werror
+
+nullshell: nullshell.c
+ $(CC) $(CFLAGS) $(LDFLAGS) nullshell.c -o nullshell
+
+install: nullshell
+ $(INSTALL) nullshell $(DESTDIR)$(PREFIX)/bin/nullshell
+
+clean:
+ $(RM) -f nullshell
diff --git a/README.md b/README.md
index 07c480d..335ca12 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,47 @@
nullshell
=========
-do nothing but print asterisks, can be used for login shell
+**do nothing but print asterisks, can be used for login shell**
+
+This is a minimal program that does nothing but print asteriks every now
+and then. It is intended to be used for login shell with accounts
+accessible via secure shell that are used for secure tunneling but
+should not allow to execute commands.
+
+Requirements
+------------
+
+To compile and run `nullshell` you need:
+
+* nothing (this is plain C)
+* [markdown](http://daringfireball.net/projects/markdown/) (HTML documentation)
+
+Additionally it is expected to have `make` and a C compiler around to
+successfully compile.
+
+Build and install
+-----------------
+
+Building and installing is very easy. Just run:
+
+> make
+
+followed by:
+
+> make install
+
+This will place an executable at `/usr/bin/nullshell`.
+
+Usage
+-----
+
+To create a new user `user` with `nullshell` as login shell just run:
+
+> useradd -s /usr/bin/nullshell user
+
+Or to make `nullshell` the login shell for an existing user `user`:
+
+> usermod -s /usr/bin/nullshell user
+
+Make sure `/usr/bin/nullshell` is listed in `/etc/shells` if your system
+expects this.
diff --git a/nullshell.c b/nullshell.c
new file mode 100644
index 0000000..1c14d7c
--- /dev/null
+++ b/nullshell.c
@@ -0,0 +1,47 @@
+/*
+ * (C) 2013 by Christian Hesse <mail@eworm.de>
+ *
+ * This software may be used and distributed according to the terms
+ * of the GNU General Public License, incorporated herein by reference.
+ *
+ * Based on ideas from Sleep Dummy Shell (SleepShell)
+ * by Mario A. Valdez-Ramirez (http://www.mariovaldez.net/)
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#define SLEEPTIME 10
+
+int main(int argc, char **argv) {
+ char *ssh_connection, *ssh_client, *ssh_tty;
+
+ /* read environment variables */
+ ssh_connection = getenv("SSH_CONNECTION");
+ ssh_client = getenv("SSH_CLIENT");
+ ssh_tty = getenv("SSH_TTY");
+
+ /* clear the screen */
+ fputs("\033[2J\033[1;1H", stdout);
+ fflush(NULL);
+
+ /* print some info if available */
+ if (ssh_connection != NULL && ssh_client != NULL) {
+ printf("Connection: %s\nClient: %s\n", ssh_connection, ssh_client);
+ if (ssh_tty != NULL)
+ printf("Terminal: %s\n", ssh_tty);
+ }
+
+ /* print an asterisk every SLEEPTIME seconds */
+ while (1) {
+ sleep(SLEEPTIME);
+ putchar('*');
+ fflush(NULL);
+ }
+
+ /* we should never get here.... */
+ return EXIT_SUCCESS;
+}
+
+// vim: set syntax=c: