From e655e950fc8521715965ac83e2b1e0cd27249659 Mon Sep 17 00:00:00 2001 From: ~keith Date: Fri, 20 May 2022 17:51:25 +0000 Subject: [PATCH] 0.1 release --- README.md | 27 +++++++- po/en.po | 189 +++++++++++++++++++++++++++++++++++++++++++++++--- po/fr.po | 189 +++++++++++++++++++++++++++++++++++++++++++++++--- po/hlogin.pot | 189 +++++++++++++++++++++++++++++++++++++++++++++++--- ui_old.tar.gz | Bin 2870 -> 0 bytes 5 files changed, 569 insertions(+), 25 deletions(-) delete mode 100644 ui_old.tar.gz diff --git a/README.md b/README.md index 33cdda6..ee70e61 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,31 @@ A replacement for `/bin/login` which provides a friendly TUI greeter. guarantee that for certain. Use it at your own risk. ## TODO -- [ ] UTF-8 support - [ ] Respect `/etc/login.defs` +- [ ] UTF-8 support - [ ] Appearance customization + +## Install +hlogin depends on ncursesw, panel, and pam. It also requires GNU Autotools and pkg-config. + +Generate autotools files: +``` sh +aclocal +autoheader +automake +autoconf +``` + +Configure, build, and install: +``` sh +./configure --prefix="/usr" +make +sudo make install +``` + +To use hlogin with agetty, add the options `-n -l /usr/bin/hlogin` to it in your inittab, like so: + +``` sh +c1:12345:respawn:/sbin/agetty -n -l /usr/bin/hlogin 38400 tty1 linux +``` + diff --git a/po/en.po b/po/en.po index bc20e48..2612a5b 100644 --- a/po/en.po +++ b/po/en.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: hlogin 0.1\n" "Report-Msgid-Bugs-To: keith+hlogin@keithhacks.cyou\n" -"POT-Creation-Date: 2022-05-15 23:05+0000\n" +"POT-Creation-Date: 2022-05-20 16:32+0000\n" "PO-Revision-Date: 2022-05-15 23:06+0000\n" "Last-Translator: ~keith \n" "Language-Team: English\n" @@ -17,19 +17,192 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: hlogin.c:59 +#: hlogin.c:219 msgid "Login name:" msgstr "Login name:" -#: hlogin.c:68 +#: hlogin.c:227 +#, c-format +msgid "Couldn't set PAM_USER: %s" +msgstr "Couldn't set PAM_USER: %s" + +#: hlogin.c:228 +msgid "Failed to begin authentication." +msgstr "Failed to begin authentication." + +#: hlogin.c:237 +#, c-format +msgid "TOO MANY LOGIN TRIES (%u) FROM '%s' FOR '%s', %s" +msgstr "TOO MANY LOGIN TRIES (%u) FROM '%s' FOR '%s', %s" + +#: hlogin.c:240 +#, c-format +msgid "FAILED LOGIN (%u) FROM '%s' FOR '%s', %s" +msgstr "FAILED LOGIN (%u) FROM '%s' FOR '%s', %s" + +#: hlogin.c:244 +msgid "Authentication failed." +msgstr "Authentication failed." + +#: hlogin.c:340 +msgid "Couldn't determine origin: neither remote host nor TTY" +msgstr "Couldn't determine origin: neither remote host nor TTY" + +#: hlogin.c:347 +#, c-format +msgid "Couldn't initialize PAM: %s" +msgstr "Couldn't initialize PAM: %s" + +#: hlogin.c:348 +#, c-format +msgid "pam_start error: %s. Abort.\n" +msgstr "pam_start error: %s. Abort.\n" + +#: hlogin.c:355 +#, c-format +msgid "Couldn't set PAM_RHOST: %s" +msgstr "Couldn't set PAM_RHOST: %s" + +#: hlogin.c:356 hlogin.c:365 +#, c-format +msgid "pam_set_item error: %s. Abort.\n" +msgstr "pam_set_item error: %s. Abort.\n" + +#: hlogin.c:364 +#, c-format +msgid "Couldn't set PAM_TTY: %s" +msgstr "Couldn't set PAM_TTY: %s" + +#: hlogin.c:381 +#, c-format +msgid "Login from '%s' aborted" +msgstr "Login from '%s' aborted" + +#. TRANSLATORS: default value is 5 +#: hlogin.c:390 +#, c-format +msgid "Exceeded maximum login attempts (%u).\n" +msgstr "Exceeded maximum login attempts (%u).\n" + +#: hlogin.c:404 +#, c-format +msgid "User validation failed for '%s': %s" +msgstr "User validation failed for '%s': %s" + +#: hlogin.c:417 +msgid "Failed to update login credentials." +msgstr "Failed to update login credentials." + +#: hlogin.c:421 +msgid "Cannot log in." +msgstr "Cannot log in." + +#: hlogin.c:432 +#, c-format +msgid "Couldn't get PAM_USER: %s" +msgstr "Couldn't get PAM_USER: %s" + +#: hlogin.c:433 hlogin.c:442 hlogin.c:453 +msgid "Cannot log in. The user account data is missing or invalid." +msgstr "Cannot log in. The user account data is missing or invalid." + +#: hlogin.c:441 +msgid "NULL user name. Abort." +msgstr "NULL user name. Abort." + +#: hlogin.c:452 +#, c-format +msgid "No passwd entry for '%s'. Abort." +msgstr "No passwd entry for '%s'. Abort." + +#: hlogin.c:465 +#, c-format +msgid "groups initialization failed: %m" +msgstr "groups initialization failed: %m" + +#: hlogin.c:466 hlogin.c:478 hlogin.c:489 hlogin.c:500 +msgid "Cannot log in. Unable to establish a session." +msgstr "Cannot log in. Unable to establish a session." + +#: hlogin.c:477 hlogin.c:488 hlogin.c:499 +#, c-format +msgid "Couldn't init PAM session: %s" +msgstr "Couldn't init PAM session: %s" + +#: hlogin.c:513 +#, c-format +msgid "LOGIN FROM '%s' BY '%s'" +msgstr "LOGIN FROM '%s' BY '%s'" + +#: hlogin.c:519 +#, c-format +msgid "failed to chown TTY '%s': %m" +msgstr "failed to chown TTY '%s': %m" + +#: hlogin.c:523 +#, c-format +msgid "setgid() failed: %m" +msgstr "setgid() failed: %m" + +#: hlogin.c:524 +#, c-format +msgid "error applying user GID: %m. Abort.\n" +msgstr "error applying user GID: %m. Abort.\n" + +#: hlogin.c:559 +#, c-format +msgid "error forking: %m. Abort.\n" +msgstr "error forking: %m. Abort.\n" + +#: hlogin.c:561 +#, c-format +msgid "fork() failed: %m" +msgstr "fork() failed: %m" + +#: hlogin.c:601 +#, c-format +msgid "can't reopen tty: %m" +msgstr "can't reopen tty: %m" + +#: hlogin.c:607 +#, c-format +msgid "%s is not a tty" +msgstr "%s is not a tty" + +#: hlogin.c:625 +#, c-format +msgid "TIOCSCTTY failed: %m" +msgstr "TIOCSCTTY failed: %m" + +#: hlogin.c:631 +#, c-format +msgid "setuid() failed: %m" +msgstr "setuid() failed: %m" + +#: hlogin.c:632 +#, c-format +msgid "error applying user UID: %m. Abort.\n" +msgstr "error applying user UID: %m. Abort.\n" + +#: hlogin.c:637 +#, c-format +msgid "failed to chdir to home (%s): %m" +msgstr "failed to chdir to home (%s): %m" + +#: hlogin.c:638 +#, c-format +msgid "error changing to home directory: %m. Abort.\n" +msgstr "error changing to home directory: %m. Abort.\n" + +#: ui.c:238 ui.c:385 ui.c:473 msgid "OK" msgstr "OK" -#: hlogin.c:71 -msgid "Cancel" -msgstr "Cancel" - -#: ui.c:179 +#: ui.c:344 #, c-format msgid "Welcome to %s.%s" msgstr "Welcome to %s.%s" + +#: ui.c:391 +msgid "Cancel" +msgstr "Cancel" diff --git a/po/fr.po b/po/fr.po index 433008e..2a199b2 100644 --- a/po/fr.po +++ b/po/fr.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: hlogin 0.1\n" "Report-Msgid-Bugs-To: keith+hlogin@keithhacks.cyou\n" -"POT-Creation-Date: 2022-05-15 23:05+0000\n" +"POT-Creation-Date: 2022-05-20 16:32+0000\n" "PO-Revision-Date: 2022-05-15 23:07+0000\n" "Last-Translator: ~keith \n" "Language-Team: French \n" @@ -17,19 +17,192 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: hlogin.c:59 +#: hlogin.c:219 msgid "Login name:" msgstr "Identifiant :" -#: hlogin.c:68 +#: hlogin.c:227 +#, c-format +msgid "Couldn't set PAM_USER: %s" +msgstr "Impossible de définir PAM_USER : %s" + +#: hlogin.c:228 +msgid "Failed to begin authentication." +msgstr "Échec d'initialisation de l'authentification." + +#: hlogin.c:237 +#, c-format +msgid "TOO MANY LOGIN TRIES (%u) FROM '%s' FOR '%s', %s" +msgstr "TROP DE TENTATIVES DE CONNEXION (%u) DE « %s » POUR « %s », %s" + +#: hlogin.c:240 +#, c-format +msgid "FAILED LOGIN (%u) FROM '%s' FOR '%s', %s" +msgstr "ÉCHEC DE CONNEXION (%u) À PARTIR DE « %s » POUR « %s », %s" + +#: hlogin.c:244 +msgid "Authentication failed." +msgstr "Échec de l'authentification." + +#: hlogin.c:340 +msgid "Couldn't determine origin: neither remote host nor TTY" +msgstr "Impossible de déterminer l'origine : ni hôte distant ni terminal" + +#: hlogin.c:347 +#, c-format +msgid "Couldn't initialize PAM: %s" +msgstr "Impossible d'initialiser PAM : %s" + +#: hlogin.c:348 +#, c-format +msgid "pam_start error: %s. Abort.\n" +msgstr "échec de pam_start : %s. Abandon.\n" + +#: hlogin.c:355 +#, c-format +msgid "Couldn't set PAM_RHOST: %s" +msgstr "Impossible de définir PAM_RHOST : %s" + +#: hlogin.c:356 hlogin.c:365 +#, c-format +msgid "pam_set_item error: %s. Abort.\n" +msgstr "échec de pam_set_item : %s. Abandon.\n" + +#: hlogin.c:364 +#, c-format +msgid "Couldn't set PAM_TTY: %s" +msgstr "Impossible de définir PAM_TTY : %s" + +#: hlogin.c:381 +#, c-format +msgid "Login from '%s' aborted" +msgstr "Connexion de « %s » annulée" + +#. TRANSLATORS: default value is 5 +#: hlogin.c:390 +#, c-format +msgid "Exceeded maximum login attempts (%u).\n" +msgstr "" + +#: hlogin.c:404 +#, c-format +msgid "User validation failed for '%s': %s" +msgstr "Échec de validation pour « %s » : %s" + +#: hlogin.c:417 +msgid "Failed to update login credentials." +msgstr "Échec de la modification des identifiants." + +#: hlogin.c:421 +msgid "Cannot log in." +msgstr "Échec de connexion." + +#: hlogin.c:432 +#, c-format +msgid "Couldn't get PAM_USER: %s" +msgstr "Impossible d'obtenir PAM_USER : %s" + +#: hlogin.c:433 hlogin.c:442 hlogin.c:453 +msgid "Cannot log in. The user account data is missing or invalid." +msgstr "Échec de connexion. Les données du compte sont manquantes ou invalides." + +#: hlogin.c:441 +msgid "NULL user name. Abort." +msgstr "Identifiant vide. Abandon." + +#: hlogin.c:452 +#, c-format +msgid "No passwd entry for '%s'. Abort." +msgstr "Aucune entrée passwd pour « %s ». Abandon." + +#: hlogin.c:465 +#, c-format +msgid "groups initialization failed: %m" +msgstr "échec d'initialisation des groupes : %m" + +#: hlogin.c:466 hlogin.c:478 hlogin.c:489 hlogin.c:500 +msgid "Cannot log in. Unable to establish a session." +msgstr "Échec de connexion. Impossible d'ouvrir la session." + +#: hlogin.c:477 hlogin.c:488 hlogin.c:499 +#, c-format +msgid "Couldn't init PAM session: %s" +msgstr "Impossible d'initialiser la session PAM : %s" + +#: hlogin.c:513 +#, c-format +msgid "LOGIN FROM '%s' BY '%s'" +msgstr "CONNEXION DE « %s » FAIT PAR « %s »" + +#: hlogin.c:519 +#, c-format +msgid "failed to chown TTY '%s': %m" +msgstr "échec de chown le terminal « %s » : %m" + +#: hlogin.c:523 +#, c-format +msgid "setgid() failed: %m" +msgstr "échec de setgid() : %m" + +#: hlogin.c:524 +#, c-format +msgid "error applying user GID: %m. Abort.\n" +msgstr "échec d'initialisation de GID : %m. Abandon.\n" + +#: hlogin.c:559 +#, c-format +msgid "error forking: %m. Abort.\n" +msgstr "échec de fork() : %m. Abandon.\n" + +#: hlogin.c:561 +#, c-format +msgid "fork() failed: %m" +msgstr "échec de fork() : %m" + +#: hlogin.c:601 +#, c-format +msgid "can't reopen tty: %m" +msgstr "impossible de rouvrir le terminal : %m" + +#: hlogin.c:607 +#, c-format +msgid "%s is not a tty" +msgstr "%s n'est pas un terminal" + +#: hlogin.c:625 +#, c-format +msgid "TIOCSCTTY failed: %m" +msgstr "échec de TIOCSCTTY : %m" + +#: hlogin.c:631 +#, c-format +msgid "setuid() failed: %m" +msgstr "échec de setuid() : %m" + +#: hlogin.c:632 +#, c-format +msgid "error applying user UID: %m. Abort.\n" +msgstr "échec d'initialisation de UID : %m. Abandon.\n" + +#: hlogin.c:637 +#, c-format +msgid "failed to chdir to home (%s): %m" +msgstr "impossible d'exécuter « chdir » avec « %s » : %m" + +#: hlogin.c:638 +#, c-format +msgid "error changing to home directory: %m. Abort.\n" +msgstr "impossible de changer le répertoire : %m. Abandon.\n" + +#: ui.c:238 ui.c:385 ui.c:473 msgid "OK" msgstr "Ok" -#: hlogin.c:71 -msgid "Cancel" -msgstr "Annuler" - -#: ui.c:179 +#: ui.c:344 #, c-format msgid "Welcome to %s.%s" msgstr "Bienvenue à %s.%s" + +#: ui.c:391 +msgid "Cancel" +msgstr "Annuler" diff --git a/po/hlogin.pot b/po/hlogin.pot index be65cc3..f2d0bae 100644 --- a/po/hlogin.pot +++ b/po/hlogin.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: hlogin 0.1\n" "Report-Msgid-Bugs-To: keith+hlogin@keithhacks.cyou\n" -"POT-Creation-Date: 2022-05-15 23:05+0000\n" +"POT-Creation-Date: 2022-05-20 16:32+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,19 +17,192 @@ msgstr "" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: hlogin.c:59 +#: hlogin.c:219 msgid "Login name:" msgstr "" -#: hlogin.c:68 +#: hlogin.c:227 +#, c-format +msgid "Couldn't set PAM_USER: %s" +msgstr "" + +#: hlogin.c:228 +msgid "Failed to begin authentication." +msgstr "" + +#: hlogin.c:237 +#, c-format +msgid "TOO MANY LOGIN TRIES (%u) FROM '%s' FOR '%s', %s" +msgstr "" + +#: hlogin.c:240 +#, c-format +msgid "FAILED LOGIN (%u) FROM '%s' FOR '%s', %s" +msgstr "" + +#: hlogin.c:244 +msgid "Authentication failed." +msgstr "" + +#: hlogin.c:340 +msgid "Couldn't determine origin: neither remote host nor TTY" +msgstr "" + +#: hlogin.c:347 +#, c-format +msgid "Couldn't initialize PAM: %s" +msgstr "" + +#: hlogin.c:348 +#, c-format +msgid "pam_start error: %s. Abort.\n" +msgstr "" + +#: hlogin.c:355 +#, c-format +msgid "Couldn't set PAM_RHOST: %s" +msgstr "" + +#: hlogin.c:356 hlogin.c:365 +#, c-format +msgid "pam_set_item error: %s. Abort.\n" +msgstr "" + +#: hlogin.c:364 +#, c-format +msgid "Couldn't set PAM_TTY: %s" +msgstr "" + +#: hlogin.c:381 +#, c-format +msgid "Login from '%s' aborted" +msgstr "" + +#. TRANSLATORS: default value is 5 +#: hlogin.c:390 +#, c-format +msgid "Exceeded maximum login attempts (%u).\n" +msgstr "" + +#: hlogin.c:404 +#, c-format +msgid "User validation failed for '%s': %s" +msgstr "" + +#: hlogin.c:417 +msgid "Failed to update login credentials." +msgstr "" + +#: hlogin.c:421 +msgid "Cannot log in." +msgstr "" + +#: hlogin.c:432 +#, c-format +msgid "Couldn't get PAM_USER: %s" +msgstr "" + +#: hlogin.c:433 hlogin.c:442 hlogin.c:453 +msgid "Cannot log in. The user account data is missing or invalid." +msgstr "" + +#: hlogin.c:441 +msgid "NULL user name. Abort." +msgstr "" + +#: hlogin.c:452 +#, c-format +msgid "No passwd entry for '%s'. Abort." +msgstr "" + +#: hlogin.c:465 +#, c-format +msgid "groups initialization failed: %m" +msgstr "" + +#: hlogin.c:466 hlogin.c:478 hlogin.c:489 hlogin.c:500 +msgid "Cannot log in. Unable to establish a session." +msgstr "" + +#: hlogin.c:477 hlogin.c:488 hlogin.c:499 +#, c-format +msgid "Couldn't init PAM session: %s" +msgstr "" + +#: hlogin.c:513 +#, c-format +msgid "LOGIN FROM '%s' BY '%s'" +msgstr "" + +#: hlogin.c:519 +#, c-format +msgid "failed to chown TTY '%s': %m" +msgstr "" + +#: hlogin.c:523 +#, c-format +msgid "setgid() failed: %m" +msgstr "" + +#: hlogin.c:524 +#, c-format +msgid "error applying user GID: %m. Abort.\n" +msgstr "" + +#: hlogin.c:559 +#, c-format +msgid "error forking: %m. Abort.\n" +msgstr "" + +#: hlogin.c:561 +#, c-format +msgid "fork() failed: %m" +msgstr "" + +#: hlogin.c:601 +#, c-format +msgid "can't reopen tty: %m" +msgstr "" + +#: hlogin.c:607 +#, c-format +msgid "%s is not a tty" +msgstr "" + +#: hlogin.c:625 +#, c-format +msgid "TIOCSCTTY failed: %m" +msgstr "" + +#: hlogin.c:631 +#, c-format +msgid "setuid() failed: %m" +msgstr "" + +#: hlogin.c:632 +#, c-format +msgid "error applying user UID: %m. Abort.\n" +msgstr "" + +#: hlogin.c:637 +#, c-format +msgid "failed to chdir to home (%s): %m" +msgstr "" + +#: hlogin.c:638 +#, c-format +msgid "error changing to home directory: %m. Abort.\n" +msgstr "" + +#: ui.c:238 ui.c:385 ui.c:473 msgid "OK" msgstr "" -#: hlogin.c:71 -msgid "Cancel" -msgstr "" - -#: ui.c:179 +#: ui.c:344 #, c-format msgid "Welcome to %s.%s" msgstr "" + +#: ui.c:391 +msgid "Cancel" +msgstr "" diff --git a/ui_old.tar.gz b/ui_old.tar.gz deleted file mode 100644 index 9f70b2566a66532f6cdfece9c1b215a4cca7e992..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2870 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