Dont hard-code nologin file

It's configurable in /etc/login.defs as NOLOGINS_FILE, avoid to hard
coding it here, introduce a macro FINIT_NOLOGIN_PATH instead which is
configurable from compiler flags, it's not defined, then back to
_PATH_NOLOGIN from /usr/include/paths.h.

Signed-off-by: Ming Liu <liu.ming50@gmail.com>
This commit is contained in:
Ming Liu committed 2021-09-17 13:10:01 +02:00
1 parent a7c0b42965
commit 6728b77aca
1 file changed
+9 -4
+9 -4
View File
@@ -23,6 +23,7 @@
#include "config.h" /* Generated by configure script */ #include "config.h" /* Generated by configure script */
#include <paths.h>
#include <sys/types.h> #include <sys/types.h>
#include "finit.h" #include "finit.h"
@@ -38,6 +39,10 @@
sm_t sm; sm_t sm;
#ifndef FINIT_NOLOGIN_PATH
#define FINIT_NOLOGIN_PATH _PATH_NOLOGIN /* Stop user logging in. */
#endif
void sm_init(sm_t *sm) void sm_init(sm_t *sm)
{ {
sm->state = SM_BOOTSTRAP_STATE; sm->state = SM_BOOTSTRAP_STATE;
@@ -76,16 +81,16 @@ static char *sm_status(sm_state_t state)
* Disable login in single user mode and shutdown/reboot * Disable login in single user mode and shutdown/reboot
* *
* Re-enable only when going from these runlevels, this way a user can * Re-enable only when going from these runlevels, this way a user can
* manage /etc/nologin manually within the other runlevels without us * manage FINIT_NOLOGIN_PATH manually within the other runlevels without
* pulling the rug from under their feet. * us pulling the rug from under their feet.
*/ */
static void nologin(void) static void nologin(void)
{ {
if (runlevel == 1 || runlevel == 0 || runlevel == 6) if (runlevel == 1 || runlevel == 0 || runlevel == 6)
touch("/etc/nologin"); touch(FINIT_NOLOGIN_PATH);
if (prevlevel == 1 || prevlevel == 0 || prevlevel == 6) if (prevlevel == 1 || prevlevel == 0 || prevlevel == 6)
erase("/etc/nologin"); erase(FINIT_NOLOGIN_PATH);
} }
void sm_set_runlevel(sm_t *sm, int newlevel) void sm_set_runlevel(sm_t *sm, int newlevel)