commit 6e7386edb34f5acdd5dbbee68e85b16415a3b4aa
parent e0dc3f9546b3cd839aef8e58376c6295679a5ed5
Author: Mattias Andrée <maandree@kth.se>
Date: Sat, 26 Mar 2016 11:30:56 +0100
Add nologin(8)
Signed-off-by: Mattias Andrée <maandree@kth.se>
Diffstat:
3 files changed, 45 insertions(+), 0 deletions(-)
diff --git a/Makefile b/Makefile
@@ -64,6 +64,7 @@ BIN = \
mkswap \
mount \
mountpoint \
+ nologin \
pagesize \
passwd \
pidof \
@@ -129,6 +130,7 @@ MAN8 = \
lsusb.8 \
mkswap.8 \
mount.8 \
+ nologin.8 \
pivot_root.8 \
readahead.8 \
rmmod.8 \
diff --git a/nologin.8 b/nologin.8
@@ -0,0 +1,21 @@
+.Dd March 26, 2016
+.Dt NOLOGIN 8
+.Os ubase
+.Sh NAME
+.Nm nologin
+.Nd refuse login
+.Sh SYNOPSIS
+.Nm
+.Sh DESCRIPTION
+.Nm
+prints a message informing the user that she
+is not allowed to log in. If /etc/nologin.txt
+exists, its content is printed instead of
+the default message.
+.Pp
+.Nm
+is intended to be specified as the user's
+default shell.
+.Sh EXIT STATUS
+.Nm
+returns a status code indicating failure.
diff --git a/nologin.c b/nologin.c
@@ -0,0 +1,22 @@
+/* See LICENSE file for copyright and license details. */
+#include <stdio.h>
+#include <unistd.h>
+#include <fcntl.h>
+
+int
+main(void)
+{
+ int fd;
+ char buf[BUFSIZ];
+ ssize_t n;
+
+ fd = open("/etc/nologin.txt", O_RDONLY);
+ if (fd >= 0) {
+ while ((n = read(fd, buf, sizeof(buf))) > 0)
+ write(STDOUT_FILENO, buf, n);
+ close(fd);
+ } else {
+ printf("The account is currently unavailable.\n");
+ }
+ return 1;
+}