7 Commits

Author SHA1 Message Date
GalaxyShard
60be7ada9e Update & improve Esperanto translation (#1055)
This PR adds translations for new strings added since I initially created the translation. Additionally, some strings were rephrased for consistency and to use more colloquial terms and grammatical structures (based on other apps in Esperanto and komputeko, a dictionary of tech terminology), and I also fixed a few translation errors (sorry about those!).

- [x] I have tested & confirmed the changes work locally
- [x] I have read and fully adhere to the rules set in the contributing guidelines found in `CONTRIBUTING.md`

Reviewed-on: https://codeberg.org/fairyglade/ly/pulls/1055
Reviewed-by: AnErrupTion <anerruption+codeberg@disroot.org>
2026-09-08 10:20:31 +02:00
RacerBG
863162b5f7 Update Bulgarian Translation (#1054)
Signed-off-by: RacerBG <racerbg@noreply.codeberg.org>
Reviewed-on: https://codeberg.org/fairyglade/ly/pulls/1054
Reviewed-by: AnErrupTion <anerruption+codeberg@disroot.org>
2026-09-05 08:25:18 +02:00
AnErrupTion
809728e06a autrh: Check if faillock file exists, not just dir
Signed-off-by: AnErrupTion <anerruption@disroot.org>
2026-08-27 10:54:16 +02:00
AnErrupTion
255af0f1d4 config: Don't error out on missing fields
Signed-off-by: AnErrupTion <anerruption@disroot.org>
2026-08-26 15:53:20 +02:00
AnErrupTion
a6e5f87e24 auth: Check faillock for locked account (closes #898)
Signed-off-by: AnErrupTion <anerruption@disroot.org>
2026-08-26 15:24:14 +02:00
AnErrupTion
c90aec373e auth: Implement password reset after expiration (closes #992)
Signed-off-by: AnErrupTion <anerruption@disroot.org>
2026-08-26 09:36:02 +02:00
AnErrupTion
35fa91058b migrator: One TODO is gone! Yippee!
Signed-off-by: AnErrupTion <anerruption@disroot.org>
2026-08-26 09:13:39 +02:00
32 changed files with 198 additions and 79 deletions

View File

@@ -207,9 +207,7 @@ pub fn LuaParser(comptime Struct: type) type {
} }
// handle missing required fields // handle missing required fields
if (lua.isNil(-1)) { if (lua.isNil(-1)) return;
return error.MissingRequiredField;
}
const actual_type_info = @typeInfo(actual_type); const actual_type_info = @typeInfo(actual_type);
errdefer |err| { errdefer |err| {

View File

@@ -262,6 +262,13 @@ ly = {
-- Default is red and bold -- Default is red and bold
error_fg = 0x01FF0000, error_fg = 0x01FF0000,
-- Tally directory for the pam_faillock module (if present)
-- Used for getting if an account is locked or not after too many failed
-- login attempts
-- If directory doesn't exist, lock status won't be checked when
-- authenticating
faillock_tally_dir = "/var/run/faillock",
-- Foreground color id -- Foreground color id
fg = 0x00FFFFFF, fg = 0x00FFFFFF,

View File

@@ -6,6 +6,7 @@ custom = مخصص
custom_info_err_output_long = الإخراج طويل جداً custom_info_err_output_long = الإخراج طويل جداً
custom_info_err_no_output = لا يوجد إخراج custom_info_err_no_output = لا يوجد إخراج
custom_info_err_no_output_error = ، خطأ محتمل custom_info_err_no_output_error = ، خطأ محتمل
err_alloc = فشل في تخصيص الذاكرة err_alloc = فشل في تخصيص الذاكرة
err_args = تعذر تحليل وسيطات سطر الأوامر err_args = تعذر تحليل وسيطات سطر الأوامر
err_autologin_session = لم يتم العثور على جلسة تسجيل الدخول التلقائي err_autologin_session = لم يتم العثور على جلسة تسجيل الدخول التلقائي
@@ -33,7 +34,6 @@ err_pam_abort = تم إلغاء معاملة PAM
err_pam_acct_expired = الحساب منتهي الصلاحية err_pam_acct_expired = الحساب منتهي الصلاحية
err_pam_auth = خطأ في المصادقة (Authentication error) err_pam_auth = خطأ في المصادقة (Authentication error)
err_pam_authinfo_unavail = فشل في الحصول على معلومات المستخدم err_pam_authinfo_unavail = فشل في الحصول على معلومات المستخدم
err_pam_authok_reqd = انتهت صلاحية رمز المصادقة (Token)
err_pam_buf = خطأ في ذاكرة التخزين المؤقت (Buffer) err_pam_buf = خطأ في ذاكرة التخزين المؤقت (Buffer)
err_pam_cred_err = فشل في تعيين بيانات الاعتماد (Credentials) err_pam_cred_err = فشل في تعيين بيانات الاعتماد (Credentials)
err_pam_cred_expired = بيانات الاعتماد منتهية الصلاحية err_pam_cred_expired = بيانات الاعتماد منتهية الصلاحية
@@ -77,6 +77,7 @@ shell = shell
shutdown = ايقاف التشغيل shutdown = ايقاف التشغيل
sleep = وضع السكون sleep = وضع السكون
toggle_password = إظهار/إخفاء كلمة المرور toggle_password = إظهار/إخفاء كلمة المرور
wayland = wayland wayland = wayland
x11 = x11 x11 = x11
xinitrc = xinitrc xinitrc = xinitrc

View File

@@ -6,6 +6,7 @@ custom = персонализирано
custom_info_err_output_long = резултатът е твърде дълъг custom_info_err_output_long = резултатът е твърде дълъг
custom_info_err_no_output = няма резултат custom_info_err_no_output = няма резултат
custom_info_err_no_output_error = , възможна грешка custom_info_err_no_output_error = , възможна грешка
err_acc_locked = профилът е заключен, твърде много неуспешни опити
err_alloc = неуспешно заделяне на памет err_alloc = неуспешно заделяне на памет
err_args = неуспешен анализ на аргументите от командния ред err_args = неуспешен анализ на аргументите от командния ред
err_autologin_session = сесията за автоматично влизане не е намерена err_autologin_session = сесията за автоматично влизане не е намерена
@@ -33,7 +34,6 @@ err_pam_abort = прекратена транзакция
err_pam_acct_expired = изтекъл профил err_pam_acct_expired = изтекъл профил
err_pam_auth = грешка при удостоверяването err_pam_auth = грешка при удостоверяването
err_pam_authinfo_unavail = неуспешно получаване на информация за потребителя err_pam_authinfo_unavail = неуспешно получаване на информация за потребителя
err_pam_authok_reqd = изтекъл жетон
err_pam_buf = грешка в буфера на паметта err_pam_buf = грешка в буфера на паметта
err_pam_cred_err = неуспешно задаване на удостоверения err_pam_cred_err = неуспешно задаване на удостоверения
err_pam_cred_expired = изтекли удостоверения err_pam_cred_expired = изтекли удостоверения
@@ -77,6 +77,7 @@ shell = обвивка
shutdown = изключване shutdown = изключване
sleep = заспиване sleep = заспиване
toggle_password = превключване на паролата toggle_password = превключване на паролата
token_expired = паролата е изтекла, моля, нулирайте паролата си
wayland = wayland wayland = wayland
x11 = x11 x11 = x11
xinitrc = xinitrc xinitrc = xinitrc

View File

@@ -6,6 +6,7 @@ custom = personalitzat
custom_info_err_output_long = sortida massa llarga custom_info_err_output_long = sortida massa llarga
custom_info_err_no_output = sense sortida custom_info_err_no_output = sense sortida
custom_info_err_no_output_error = , possible error custom_info_err_no_output_error = , possible error
err_alloc = assignació de memòria fallida err_alloc = assignació de memòria fallida
err_args = no s'han pogut analitzar els arguments de la línia d'ordres err_args = no s'han pogut analitzar els arguments de la línia d'ordres
err_autologin_session = no s'ha trobat la sessió d'inici de sessió automàtic err_autologin_session = no s'ha trobat la sessió d'inici de sessió automàtic
@@ -33,7 +34,6 @@ err_pam_abort = transacció pam avortada
err_pam_acct_expired = compte expirat err_pam_acct_expired = compte expirat
err_pam_auth = error d'autenticació err_pam_auth = error d'autenticació
err_pam_authinfo_unavail = error en obtenir la informació de l'usuari err_pam_authinfo_unavail = error en obtenir la informació de l'usuari
err_pam_authok_reqd = token expirat
err_pam_buf = error en la memòria intermèdia err_pam_buf = error en la memòria intermèdia
err_pam_cred_err = error en establir les credencials err_pam_cred_err = error en establir les credencials
err_pam_cred_expired = credencials expirades err_pam_cred_expired = credencials expirades
@@ -77,6 +77,7 @@ shell = shell
shutdown = aturar shutdown = aturar
sleep = suspendre sleep = suspendre
toggle_password = mostrar/amagar contrasenya toggle_password = mostrar/amagar contrasenya
wayland = wayland wayland = wayland
x11 = x11 x11 = x11
xinitrc = xinitrc xinitrc = xinitrc

View File

@@ -6,6 +6,7 @@ custom = vlastní
custom_info_err_output_long = výstup je příliš dlouhý custom_info_err_output_long = výstup je příliš dlouhý
custom_info_err_no_output = žádný výstup custom_info_err_no_output = žádný výstup
custom_info_err_no_output_error = , možná chyba custom_info_err_no_output_error = , možná chyba
err_alloc = alokace paměti selhala err_alloc = alokace paměti selhala
err_args = nelze analyzovat argumenty příkazového řádku err_args = nelze analyzovat argumenty příkazového řádku
err_autologin_session = relace automatického přihlášení nebyla nalezena err_autologin_session = relace automatického přihlášení nebyla nalezena
@@ -33,7 +34,6 @@ err_pam_abort = pam transakce přerušena
err_pam_acct_expired = platnost účtu vypršela err_pam_acct_expired = platnost účtu vypršela
err_pam_auth = chyba autentizace err_pam_auth = chyba autentizace
err_pam_authinfo_unavail = nelze získat informace o uživateli err_pam_authinfo_unavail = nelze získat informace o uživateli
err_pam_authok_reqd = platnost tokenu vypršela
err_pam_buf = chyba vyrovnávací paměti err_pam_buf = chyba vyrovnávací paměti
err_pam_cred_err = nelze nastavit pověření err_pam_cred_err = nelze nastavit pověření
err_pam_cred_expired = platnost pověření vypršela err_pam_cred_expired = platnost pověření vypršela
@@ -77,6 +77,7 @@ shell = příkazový řádek
shutdown = vypnout shutdown = vypnout
sleep = uspat sleep = uspat
toggle_password = zobrazit/skrýt heslo toggle_password = zobrazit/skrýt heslo
wayland = wayland wayland = wayland
x11 = x11 x11 = x11
xinitrc = xinitrc xinitrc = xinitrc

View File

@@ -6,6 +6,7 @@ custom = benutzerdefiniert
custom_info_err_output_long = Ausgabe zu lang custom_info_err_output_long = Ausgabe zu lang
custom_info_err_no_output = keine Ausgabe custom_info_err_no_output = keine Ausgabe
custom_info_err_no_output_error = , möglicher Fehler custom_info_err_no_output_error = , möglicher Fehler
err_alloc = Speicherzuweisung fehlgeschlagen err_alloc = Speicherzuweisung fehlgeschlagen
err_args = Kommandozeilenargumente konnten nicht verarbeitet werden err_args = Kommandozeilenargumente konnten nicht verarbeitet werden
err_autologin_session = Autologin-Sitzung nicht gefunden err_autologin_session = Autologin-Sitzung nicht gefunden
@@ -33,7 +34,6 @@ err_pam_abort = PAM-Transaktion abgebrochen
err_pam_acct_expired = Benutzerkonto abgelaufen err_pam_acct_expired = Benutzerkonto abgelaufen
err_pam_auth = Authentifizierungsfehler err_pam_auth = Authentifizierungsfehler
err_pam_authinfo_unavail = Abrufen der Benutzerinformationen fehlgeschlagen err_pam_authinfo_unavail = Abrufen der Benutzerinformationen fehlgeschlagen
err_pam_authok_reqd = Passwort abgelaufen
err_pam_buf = Speicherpufferfehler err_pam_buf = Speicherpufferfehler
err_pam_cred_err = Fehler beim Setzen der Anmeldedaten err_pam_cred_err = Fehler beim Setzen der Anmeldedaten
err_pam_cred_expired = Anmeldedaten abgelaufen err_pam_cred_expired = Anmeldedaten abgelaufen
@@ -77,6 +77,7 @@ shell = Shell
shutdown = Herunterfahren shutdown = Herunterfahren
sleep = Sleep sleep = Sleep
toggle_password = Passwort anzeigen/verbergen toggle_password = Passwort anzeigen/verbergen
wayland = wayland wayland = wayland
x11 = x11 x11 = x11
xinitrc = xinitrc xinitrc = xinitrc

View File

@@ -6,6 +6,7 @@ custom = custom
custom_info_err_output_long = output too long custom_info_err_output_long = output too long
custom_info_err_no_output = no output custom_info_err_no_output = no output
custom_info_err_no_output_error = , possible error custom_info_err_no_output_error = , possible error
err_acc_locked = account locked, too many attempts
err_alloc = failed memory allocation err_alloc = failed memory allocation
err_args = unable to parse command line arguments err_args = unable to parse command line arguments
err_autologin_session = autologin session not found err_autologin_session = autologin session not found
@@ -33,7 +34,6 @@ err_pam_abort = pam transaction aborted
err_pam_acct_expired = account expired err_pam_acct_expired = account expired
err_pam_auth = authentication error err_pam_auth = authentication error
err_pam_authinfo_unavail = failed to get user info err_pam_authinfo_unavail = failed to get user info
err_pam_authok_reqd = token expired
err_pam_buf = memory buffer error err_pam_buf = memory buffer error
err_pam_cred_err = failed to set credentials err_pam_cred_err = failed to set credentials
err_pam_cred_expired = credentials expired err_pam_cred_expired = credentials expired
@@ -77,6 +77,7 @@ shell = shell
shutdown = shutdown shutdown = shutdown
sleep = sleep sleep = sleep
toggle_password = toggle password toggle_password = toggle password
token_expired = password expired, please reset
wayland = wayland wayland = wayland
x11 = x11 x11 = x11
xinitrc = xinitrc xinitrc = xinitrc

View File

@@ -1,15 +1,16 @@
authenticating = aŭtentigado... authenticating = aŭtentigante...
brightness_down = malpliigi helecon brightness_down = malpliigi helecon
brightness_up = pliigi helecon brightness_up = pliigi helecon
capslock = majuskla baskulo capslock = majuskla baskulo
custom = propra custom = propra
custom_info_err_output_long = eligo tro longa custom_info_err_output_long = eligo estas tro longa
custom_info_err_no_output = neniu eligo custom_info_err_no_output = neniu eligo
custom_info_err_no_output_error = , ebla eraro custom_info_err_no_output_error = , ebla eraro
err_alloc = malsukcesis memorasignon err_acc_locked = konto ŝlosiĝis, tro multaj provoj
err_alloc = malsukcesis memorasigno
err_args = ne povas analizi argumentojn de komanda linio err_args = ne povas analizi argumentojn de komanda linio
err_autologin_session = aŭtomatan ensalutan seancon ne trovis err_autologin_session = aŭtomata ensaluta seanco ne troviĝis
err_bounds = indico estas ekster-intervala err_bounds = indico estas ekster la limoj
err_brightness_change = malsukcesis ŝanĝi la helecon err_brightness_change = malsukcesis ŝanĝi la helecon
err_chdir = malsukcesis malfermi hejman dosierujon err_chdir = malsukcesis malfermi hejman dosierujon
err_clock_too_long = horloĝa ĉeno estas tro longa err_clock_too_long = horloĝa ĉeno estas tro longa
@@ -17,33 +18,32 @@ err_config = ne povas analizi agordan dosieron
err_crawl = malsukcesis dum serĉado de seancaj dosierujoj err_crawl = malsukcesis dum serĉado de seancaj dosierujoj
err_dgn_oob = protokola mesaĝo err_dgn_oob = protokola mesaĝo
err_domain = malvalida domajno err_domain = malvalida domajno
err_empty_password = ne akceptas malplenan pasvorton err_empty_password = malplena pasvorto malpermesiĝas
err_envlist = malsukcesis preni la medivariablojn err_envlist = malsukcesis preni la medivariablojn
err_get_active_tty = malsukcesis preni la aktivan TTY-on err_get_active_tty = malsukcesis preni la aktivan TTY
err_hibernate = malsukcesis ruli la komandon por diskodormo err_hibernate = malsukcesis ruli la komandon por diskodormo
err_hostname = malsukcesis preni la sistemnomon err_hostname = malsukcesis preni la sistemnomon
err_inactivity = malsukcesis ruli la agorditan komandon por malaktiveco err_inactivity = malsukcesis ruli la komandon de malaktiveco
err_lock_state = malsukcesis preni la ŝlosan staton err_lock_state = malsukcesis preni la ŝlosan staton
err_log = malsukcesis malfermi la protokolan dosieron err_log = malsukcesis malfermi la protokolan dosieron
err_mlock = malsukcesis ŝlosi pasvortan memoron err_mlock = malsukcesis ŝlosi pasvortan memoron
err_null = nula memorloko err_null = nula referenco
err_numlock = malsukcesis agordi numeran baskulon err_numlock = malsukcesis agordi nombran baskulon
err_pam = PAM-a transakcio malsukcesis err_pam = PAM transakcio malsukcesis
err_pam_abort = PAM-a transakcio malsukcesis err_pam_abort = PAM transakcio malsukcesis
err_pam_acct_expired = konto eksvalidiĝis err_pam_acct_expired = konto eksvalidiĝis
err_pam_auth = aŭtentiga eraro err_pam_auth = aŭtentiga eraro
err_pam_authinfo_unavail = malsukcesis preni uzantajn informojn err_pam_authinfo_unavail = malsukcesis preni uzantajn informojn
err_pam_authok_reqd = memorsigno eksvalidiĝis err_pam_buf = memorbufra eraro
err_pam_buf = bufra eraro err_pam_cred_err = malsukcesis agordi akreditilojn
err_pam_cred_err = malsukcesis agordi akreditaĵon err_pam_cred_expired = akreditiloj eksvalidiĝis
err_pam_cred_expired = akreditaĵo eksvalidiĝis err_pam_cred_insufficient = nesufiĉaj akreditiloj
err_pam_cred_insufficient = nesufiĉa akreditaĵo err_pam_cred_unavail = malsukcesis preni akreditilojn
err_pam_cred_unavail = malsukcesis preni akreditaĵon err_pam_maxtries = atingis limon da provoj
err_pam_maxtries = atingis maksimuman kvanton da provoj
err_pam_perm_denied = permeso negis err_pam_perm_denied = permeso negis
err_pam_session = seancan eraron err_pam_session = seanca eraro
err_pam_sys = sisteman eraron err_pam_sys = sistema eraro
err_pam_user_unknown = ne konas uzanton err_pam_user_unknown = nekonita uzanto
err_path = malsukcesis agordi la median dosierindikon err_path = malsukcesis agordi la median dosierindikon
err_perm_dir = malsukcesis ŝanĝi la nunan dosierujon err_perm_dir = malsukcesis ŝanĝi la nunan dosierujon
err_perm_group = malsukcesis redukti grupajn permesojn err_perm_group = malsukcesis redukti grupajn permesojn
@@ -52,22 +52,22 @@ err_pwnam = malsukcesis preni uzantajn informojn
err_sleep = malsukcesis ruli memordorman komandon err_sleep = malsukcesis ruli memordorman komandon
err_start = malsukcesis ruli startan komandon err_start = malsukcesis ruli startan komandon
err_battery = malsukcesis ŝargi baterian staton err_battery = malsukcesis ŝargi baterian staton
err_switch_tty = malsukcesis ŝanĝi TTY-on err_switch_tty = malsukcesis ŝanĝi TTY
err_tty_ctrl = TTY-an stiran transigon malsukcesis err_tty_ctrl = stira transigo de TTY malsukcesis
err_no_users = nul uzantojn trovas err_no_users = neniu uzanto trovas
err_uid_range = malsukcesis dinamike preni UID-an intervalon err_uid_range = malsukcesis dinamike preni intervalon de UID
err_user_gid = malsukcesis agordi uzantan GID-on err_user_gid = malsukcesis agordi uzantan GID
err_user_init = malsukcesis iniciĝi uzanto err_user_init = malsukcesis pravalorizi uzanton
err_user_uid = malsukcesis agordi uzantan UID-on err_user_uid = malsukcesis agordi uzantan UID
err_xauth = malsukcesis plenumi je xauth err_xauth = malsukcesis plenumi xauth
err_xcb_conn = malsukcesis dum konectado al xcb err_xcb_conn = malsukcesis konekti al xcb
err_xsessions_dir = malsukcesis trovi seancan dosierujon err_xsessions_dir = malsukcesis trovi seancan dosierujon
err_xsessions_open = malsukcesis malfermi seancan dosierujon err_xsessions_open = malsukcesis malfermi seancan dosierujon
hibernate = diskodormi hibernate = diskodormi
insert = enmeti insert = enmeti
login = uzanto login = uzanto
logout = elsalutis logout = elsalutis
no_x11_support = x11 estas foriĝita de kompil-tempo no_x11_support = x11 estis forigita dum kompilado
normal = normala normal = normala
numlock = numera baskulo numlock = numera baskulo
other = alia other = alia
@@ -77,6 +77,7 @@ shell = ŝelo
shutdown = malŝalti shutdown = malŝalti
sleep = memordormi sleep = memordormi
toggle_password = montri/kaŝi pasvorton toggle_password = montri/kaŝi pasvorton
token_expired = pasvorto eksvalidiĝis, bonvolu reagordi ĝin
wayland = wayland wayland = wayland
x11 = x11 x11 = x11
xinitrc = xinitrc xinitrc = xinitrc

View File

@@ -6,6 +6,7 @@ custom = personalizado
custom_info_err_output_long = salida demasiado larga custom_info_err_output_long = salida demasiado larga
custom_info_err_no_output = sin salida custom_info_err_no_output = sin salida
custom_info_err_no_output_error = , posible error custom_info_err_no_output_error = , posible error
err_alloc = asignación de memoria fallida err_alloc = asignación de memoria fallida
err_args = no se pudieron analizar los argumentos de la línea de comandos err_args = no se pudieron analizar los argumentos de la línea de comandos
err_autologin_session = no se encontró la sesión de inicio de sesión automático err_autologin_session = no se encontró la sesión de inicio de sesión automático
@@ -33,7 +34,6 @@ err_pam_abort = transacción pam abortada
err_pam_acct_expired = cuenta expirada err_pam_acct_expired = cuenta expirada
err_pam_auth = error de autenticación err_pam_auth = error de autenticación
err_pam_authinfo_unavail = error al obtener información del usuario err_pam_authinfo_unavail = error al obtener información del usuario
err_pam_authok_reqd = token expirado
err_pam_buf = error de la memoria intermedia err_pam_buf = error de la memoria intermedia
err_pam_cred_err = error al establecer las credenciales err_pam_cred_err = error al establecer las credenciales
err_pam_cred_expired = credenciales expiradas err_pam_cred_expired = credenciales expiradas
@@ -77,6 +77,7 @@ shell = shell
shutdown = apagar shutdown = apagar
sleep = suspender sleep = suspender
toggle_password = mostrar/ocultar contraseña toggle_password = mostrar/ocultar contraseña
wayland = wayland wayland = wayland
x11 = x11 x11 = x11
xinitrc = xinitrc xinitrc = xinitrc

View File

@@ -6,6 +6,7 @@ custom = customisé
custom_info_err_output_long = sortie trop longue custom_info_err_output_long = sortie trop longue
custom_info_err_no_output = pas de sortie custom_info_err_no_output = pas de sortie
custom_info_err_no_output_error = , erreur possible custom_info_err_no_output_error = , erreur possible
err_acc_locked = compte bloqué, trop de tentatives
err_alloc = échec d'allocation mémoire err_alloc = échec d'allocation mémoire
err_args = échec de l'analyse des arguments en lignes de commande err_args = échec de l'analyse des arguments en lignes de commande
err_autologin_session = session de connexion automatique introuvable err_autologin_session = session de connexion automatique introuvable
@@ -33,7 +34,6 @@ err_pam_abort = transaction pam avortée
err_pam_acct_expired = compte expiré err_pam_acct_expired = compte expiré
err_pam_auth = erreur d'authentification err_pam_auth = erreur d'authentification
err_pam_authinfo_unavail = échec de l'obtention des infos utilisateur err_pam_authinfo_unavail = échec de l'obtention des infos utilisateur
err_pam_authok_reqd = tiquet expiré
err_pam_buf = erreur de mémoire tampon err_pam_buf = erreur de mémoire tampon
err_pam_cred_err = échec de la modification des identifiants err_pam_cred_err = échec de la modification des identifiants
err_pam_cred_expired = identifiants expirés err_pam_cred_expired = identifiants expirés
@@ -77,6 +77,7 @@ shell = shell
shutdown = éteindre shutdown = éteindre
sleep = veille sleep = veille
toggle_password = afficher le mot de passe toggle_password = afficher le mot de passe
token_expired = mot de passe expiré, veuillez le changer
wayland = wayland wayland = wayland
x11 = x11 x11 = x11
xinitrc = xinitrc xinitrc = xinitrc

View File

@@ -6,6 +6,7 @@ custom = personalizzato
custom_info_err_output_long = output troppo lungo custom_info_err_output_long = output troppo lungo
custom_info_err_no_output = nessun output custom_info_err_no_output = nessun output
custom_info_err_no_output_error = , possibile errore custom_info_err_no_output_error = , possibile errore
err_alloc = impossibile allocare memoria err_alloc = impossibile allocare memoria
err_args = impossibile analizzare gli argomenti della riga di comando err_args = impossibile analizzare gli argomenti della riga di comando
err_autologin_session = sessione di accesso automatico non trovata err_autologin_session = sessione di accesso automatico non trovata
@@ -33,7 +34,6 @@ err_pam_abort = transazione PAM interrotta
err_pam_acct_expired = account scaduto err_pam_acct_expired = account scaduto
err_pam_auth = errore di autenticazione err_pam_auth = errore di autenticazione
err_pam_authinfo_unavail = impossibile ottenere informazioni utente err_pam_authinfo_unavail = impossibile ottenere informazioni utente
err_pam_authok_reqd = token scaduto
err_pam_buf = errore buffer memoria err_pam_buf = errore buffer memoria
err_pam_cred_err = impossibile impostare credenziali err_pam_cred_err = impossibile impostare credenziali
err_pam_cred_expired = credenziali scadute err_pam_cred_expired = credenziali scadute
@@ -77,6 +77,7 @@ shell = shell
shutdown = arresto shutdown = arresto
sleep = sospendi sleep = sospendi
toggle_password = mostra/nascondi password toggle_password = mostra/nascondi password
wayland = wayland wayland = wayland
x11 = x11 x11 = x11
xinitrc = xinitrc xinitrc = xinitrc

View File

@@ -6,6 +6,7 @@ custom = カスタム
custom_info_err_output_long = 出力が長すぎます custom_info_err_output_long = 出力が長すぎます
custom_info_err_no_output = 出力なし custom_info_err_no_output = 出力なし
custom_info_err_no_output_error = 、エラーの可能性あり custom_info_err_no_output_error = 、エラーの可能性あり
err_alloc = メモリ割り当て失敗 err_alloc = メモリ割り当て失敗
err_args = コマンドライン引数を解析できません err_args = コマンドライン引数を解析できません
err_autologin_session = 自動ログインセッションが見つかりません err_autologin_session = 自動ログインセッションが見つかりません
@@ -33,7 +34,6 @@ err_pam_abort = PAMトランザクションが中断されました
err_pam_acct_expired = アカウントの有効期限が切れています err_pam_acct_expired = アカウントの有効期限が切れています
err_pam_auth = 認証エラー err_pam_auth = 認証エラー
err_pam_authinfo_unavail = ユーザー情報の取得に失敗しました err_pam_authinfo_unavail = ユーザー情報の取得に失敗しました
err_pam_authok_reqd = トークンの有効期限が切れています
err_pam_buf = メモリバッファエラー err_pam_buf = メモリバッファエラー
err_pam_cred_err = 認証情報の設定に失敗しました err_pam_cred_err = 認証情報の設定に失敗しました
err_pam_cred_expired = 認証情報の有効期限が切れています err_pam_cred_expired = 認証情報の有効期限が切れています
@@ -77,6 +77,7 @@ shell = シェル
shutdown = シャットダウン shutdown = シャットダウン
sleep = スリープ sleep = スリープ
toggle_password = パスワードの表示/非表示 toggle_password = パスワードの表示/非表示
wayland = Wayland wayland = Wayland
x11 = x11 x11 = x11
xinitrc = xinitrc xinitrc = xinitrc

View File

@@ -6,6 +6,7 @@ custom = kesane
custom_info_err_output_long = encam pir dirêj e custom_info_err_output_long = encam pir dirêj e
custom_info_err_no_output = encam tune custom_info_err_no_output = encam tune
custom_info_err_no_output_error = , xeletiya mimkun custom_info_err_no_output_error = , xeletiya mimkun
err_alloc = veqetandina bîrê têk çû err_alloc = veqetandina bîrê têk çû
err_args = argumanên rêzika fermanê nehatin analîzkirin err_args = argumanên rêzika fermanê nehatin analîzkirin
err_autologin_session = danişîna têketina xweber nehate dîtin err_autologin_session = danişîna têketina xweber nehate dîtin
@@ -33,7 +34,6 @@ err_pam_abort = danûstendina pam hate têkbirin
err_pam_acct_expired = dema jimarê derbas bûye err_pam_acct_expired = dema jimarê derbas bûye
err_pam_auth = şaşetiya piştrastkirinê err_pam_auth = şaşetiya piştrastkirinê
err_pam_authinfo_unavail = zanyariyên bikarhêner nehatin girtin err_pam_authinfo_unavail = zanyariyên bikarhêner nehatin girtin
err_pam_authok_reqd = dema nîşandanê derbas bûye
err_pam_buf = şaşetiya bîra demkî err_pam_buf = şaşetiya bîra demkî
err_pam_cred_err = sazkirina rastkitinê têk çû err_pam_cred_err = sazkirina rastkitinê têk çû
err_pam_cred_expired = dema rastkitinê derbas bûye err_pam_cred_expired = dema rastkitinê derbas bûye
@@ -77,6 +77,7 @@ shell = shell
shutdown = vemirîne shutdown = vemirîne
sleep = têxîne xewê sleep = têxîne xewê
toggle_password = şîfre nîşan bide/veşêre toggle_password = şîfre nîşan bide/veşêre
wayland = wayland wayland = wayland
x11 = x11 x11 = x11
xinitrc = xinitrc xinitrc = xinitrc

View File

@@ -6,6 +6,7 @@ custom = pielāgots
custom_info_err_output_long = izvade pārāk gara custom_info_err_output_long = izvade pārāk gara
custom_info_err_no_output = nav izvades custom_info_err_no_output = nav izvades
custom_info_err_no_output_error = , iespējama kļūda custom_info_err_no_output_error = , iespējama kļūda
err_alloc = neizdevās atmiņas piešķiršana err_alloc = neizdevās atmiņas piešķiršana
err_args = nevar parsēt komandrindas argumentus err_args = nevar parsēt komandrindas argumentus
err_autologin_session = automātiskās pieteikšanās sesija nav atrasta err_autologin_session = automātiskās pieteikšanās sesija nav atrasta
@@ -33,7 +34,6 @@ err_pam_abort = pam transakcija pārtraukta
err_pam_acct_expired = konts novecojis err_pam_acct_expired = konts novecojis
err_pam_auth = autentifikācijas kļūda err_pam_auth = autentifikācijas kļūda
err_pam_authinfo_unavail = neizdevās iegūt lietotāja informāciju err_pam_authinfo_unavail = neizdevās iegūt lietotāja informāciju
err_pam_authok_reqd = žetons beidzies
err_pam_buf = atmiņas bufera kļūda err_pam_buf = atmiņas bufera kļūda
err_pam_cred_err = neizdevās iestatīt akreditācijas datus err_pam_cred_err = neizdevās iestatīt akreditācijas datus
err_pam_cred_expired = akreditācijas dati novecojuši err_pam_cred_expired = akreditācijas dati novecojuši
@@ -77,6 +77,7 @@ shell = terminālis
shutdown = izslēgt shutdown = izslēgt
sleep = snauda sleep = snauda
toggle_password = rādīt/slēpt paroli toggle_password = rādīt/slēpt paroli
wayland = wayland wayland = wayland
x11 = x11 x11 = x11
xinitrc = xinitrc xinitrc = xinitrc

View File

@@ -6,6 +6,7 @@ custom = własny
custom_info_err_output_long = wyjście zbyt długie custom_info_err_output_long = wyjście zbyt długie
custom_info_err_no_output = brak wyjścia custom_info_err_no_output = brak wyjścia
custom_info_err_no_output_error = , możliwy błąd custom_info_err_no_output_error = , możliwy błąd
err_alloc = nieudana alokacja pamięci err_alloc = nieudana alokacja pamięci
err_args = nie można przetworzyć argumentów wiersza poleceń err_args = nie można przetworzyć argumentów wiersza poleceń
err_autologin_session = nie znaleziono sesji autologowania err_autologin_session = nie znaleziono sesji autologowania
@@ -33,7 +34,6 @@ err_pam_abort = transakcja pam przerwana
err_pam_acct_expired = konto wygasło err_pam_acct_expired = konto wygasło
err_pam_auth = błąd uwierzytelniania err_pam_auth = błąd uwierzytelniania
err_pam_authinfo_unavail = nie udało się zdobyć informacji o użytkowniku err_pam_authinfo_unavail = nie udało się zdobyć informacji o użytkowniku
err_pam_authok_reqd = token wygasł
err_pam_buf = błąd bufora pamięci err_pam_buf = błąd bufora pamięci
err_pam_cred_err = nie udało się ustawić uwierzytelnienia err_pam_cred_err = nie udało się ustawić uwierzytelnienia
err_pam_cred_expired = uwierzytelnienie wygasło err_pam_cred_expired = uwierzytelnienie wygasło
@@ -77,6 +77,7 @@ shell = powłoka
shutdown = wyłącz shutdown = wyłącz
sleep = uśpij sleep = uśpij
toggle_password = Pokaż/ukryj hasło toggle_password = Pokaż/ukryj hasło
wayland = wayland wayland = wayland
x11 = x11 x11 = x11
xinitrc = xinitrc xinitrc = xinitrc

View File

@@ -6,6 +6,7 @@ custom = personalizado
custom_info_err_output_long = saída demasiado longa custom_info_err_output_long = saída demasiado longa
custom_info_err_no_output = sem saída custom_info_err_no_output = sem saída
custom_info_err_no_output_error = , possível erro custom_info_err_no_output_error = , possível erro
err_alloc = erro na atribuição de memória err_alloc = erro na atribuição de memória
err_args = não foi possível analisar os argumentos da linha de comandos err_args = não foi possível analisar os argumentos da linha de comandos
err_autologin_session = sessão de início de sessão automático não encontrada err_autologin_session = sessão de início de sessão automático não encontrada
@@ -33,7 +34,6 @@ err_pam_abort = transação pam abortada
err_pam_acct_expired = conta expirada err_pam_acct_expired = conta expirada
err_pam_auth = erro de autenticação err_pam_auth = erro de autenticação
err_pam_authinfo_unavail = erro ao obter informação do utilizador err_pam_authinfo_unavail = erro ao obter informação do utilizador
err_pam_authok_reqd = token expirado
err_pam_buf = erro de buffer de memória err_pam_buf = erro de buffer de memória
err_pam_cred_err = erro ao definir credenciais err_pam_cred_err = erro ao definir credenciais
err_pam_cred_expired = credenciais expiradas err_pam_cred_expired = credenciais expiradas
@@ -77,6 +77,7 @@ shell = shell
shutdown = encerrar shutdown = encerrar
sleep = suspender sleep = suspender
toggle_password = mostrar/ocultar palavra-passe toggle_password = mostrar/ocultar palavra-passe
wayland = wayland wayland = wayland
x11 = x11 x11 = x11
xinitrc = xinitrc xinitrc = xinitrc

View File

@@ -6,6 +6,7 @@ custom = personalizado
custom_info_err_output_long = saída muito longa custom_info_err_output_long = saída muito longa
custom_info_err_no_output = sem saída custom_info_err_no_output = sem saída
custom_info_err_no_output_error = , possível erro custom_info_err_no_output_error = , possível erro
err_alloc = alocação de memória malsucedida err_alloc = alocação de memória malsucedida
err_args = não foi possível analisar os argumentos da linha de comando err_args = não foi possível analisar os argumentos da linha de comando
err_autologin_session = sessão de login automático não encontrada err_autologin_session = sessão de login automático não encontrada
@@ -33,7 +34,6 @@ err_pam_abort = transação pam abortada
err_pam_acct_expired = conta expirada err_pam_acct_expired = conta expirada
err_pam_auth = erro de autenticação err_pam_auth = erro de autenticação
err_pam_authinfo_unavail = não foi possível obter informações do usuário err_pam_authinfo_unavail = não foi possível obter informações do usuário
err_pam_authok_reqd = token expirado
err_pam_buf = erro de buffer de memória err_pam_buf = erro de buffer de memória
err_pam_cred_err = erro para definir credenciais err_pam_cred_err = erro para definir credenciais
err_pam_cred_expired = credenciais expiradas err_pam_cred_expired = credenciais expiradas
@@ -77,6 +77,7 @@ shell = shell
shutdown = desligar shutdown = desligar
sleep = suspender sleep = suspender
toggle_password = mostrar/ocultar senha toggle_password = mostrar/ocultar senha
wayland = wayland wayland = wayland
x11 = x11 x11 = x11
xinitrc = xinitrc xinitrc = xinitrc

View File

@@ -6,6 +6,7 @@ custom = personalizat
custom_info_err_output_long = ieșire prea lungă custom_info_err_output_long = ieșire prea lungă
custom_info_err_no_output = fără ieșire custom_info_err_no_output = fără ieșire
custom_info_err_no_output_error = , posibil eroare custom_info_err_no_output_error = , posibil eroare
err_alloc = alocare de memorie eșuată err_alloc = alocare de memorie eșuată
err_args = imposibil de analizat argumentele liniei de comandă err_args = imposibil de analizat argumentele liniei de comandă
err_autologin_session = sesiunea de autentificare automată nu a fost găsită err_autologin_session = sesiunea de autentificare automată nu a fost găsită
@@ -33,7 +34,6 @@ err_pam_abort = tranzacţie pam anulată
err_pam_acct_expired = cont expirat err_pam_acct_expired = cont expirat
err_pam_auth = eroare de autentificare err_pam_auth = eroare de autentificare
err_pam_authinfo_unavail = nu s-au putut obţine informaţii despre utilizator err_pam_authinfo_unavail = nu s-au putut obţine informaţii despre utilizator
err_pam_authok_reqd = token expirat
err_pam_buf = eroare de memorie (buffer) err_pam_buf = eroare de memorie (buffer)
err_pam_cred_err = nu s-au putut seta date de identificare (credentials) err_pam_cred_err = nu s-au putut seta date de identificare (credentials)
err_pam_cred_expired = datele de identificare (credentials) au expirat err_pam_cred_expired = datele de identificare (credentials) au expirat
@@ -77,6 +77,7 @@ shell = shell
shutdown = opreşte sistemul shutdown = opreşte sistemul
sleep = repaus sleep = repaus
toggle_password = afișare/ascundere parolă toggle_password = afișare/ascundere parolă
wayland = wayland wayland = wayland
x11 = x11 x11 = x11
xinitrc = xinitrc xinitrc = xinitrc

View File

@@ -6,6 +6,7 @@ custom = пользовательский
custom_info_err_output_long = вывод слишком длинный custom_info_err_output_long = вывод слишком длинный
custom_info_err_no_output = нет вывода custom_info_err_no_output = нет вывода
custom_info_err_no_output_error = , возможная ошибка custom_info_err_no_output_error = , возможная ошибка
err_alloc = не удалось выделить память err_alloc = не удалось выделить память
err_args = не удалось разобрать аргументы командной строки err_args = не удалось разобрать аргументы командной строки
err_autologin_session = не найдена сессия с автологином err_autologin_session = не найдена сессия с автологином
@@ -33,7 +34,6 @@ err_pam_abort = pam транзакция прервана
err_pam_acct_expired = срок действия аккаунта истёк err_pam_acct_expired = срок действия аккаунта истёк
err_pam_auth = ошибка аутентификации err_pam_auth = ошибка аутентификации
err_pam_authinfo_unavail = не удалось получить информацию о пользователе err_pam_authinfo_unavail = не удалось получить информацию о пользователе
err_pam_authok_reqd = токен истёк
err_pam_buf = ошибка буфера памяти err_pam_buf = ошибка буфера памяти
err_pam_cred_err = не удалось установить полномочия err_pam_cred_err = не удалось установить полномочия
err_pam_cred_expired = полномочия истекли err_pam_cred_expired = полномочия истекли
@@ -77,6 +77,7 @@ shell = оболочка
shutdown = выключить shutdown = выключить
sleep = сон sleep = сон
toggle_password = показать/скрыть пароль toggle_password = показать/скрыть пароль
wayland = wayland wayland = wayland
x11 = x11 x11 = x11
xinitrc = xinitrc xinitrc = xinitrc

View File

@@ -6,6 +6,7 @@ custom = prilagođeno
custom_info_err_output_long = izlaz predugačak custom_info_err_output_long = izlaz predugačak
custom_info_err_no_output = nema izlaza custom_info_err_no_output = nema izlaza
custom_info_err_no_output_error = , moguća greška custom_info_err_no_output_error = , moguća greška
err_alloc = neuspješna alokacija memorije err_alloc = neuspješna alokacija memorije
err_args = nije moguće raščlaniti argumente komandne linije err_args = nije moguće raščlaniti argumente komandne linije
err_autologin_session = sesija automatske prijave nije pronađena err_autologin_session = sesija automatske prijave nije pronađena
@@ -33,7 +34,6 @@ err_pam_abort = pam transakcija prekinuta
err_pam_acct_expired = nalog istekao err_pam_acct_expired = nalog istekao
err_pam_auth = greška pri autentikaciji err_pam_auth = greška pri autentikaciji
err_pam_authinfo_unavail = neuspješno uzimanje informacija o korisniku err_pam_authinfo_unavail = neuspješno uzimanje informacija o korisniku
err_pam_authok_reqd = token istekao
err_pam_buf = greška bafera memorije err_pam_buf = greška bafera memorije
err_pam_cred_err = neuspješno postavljanje kredencijala err_pam_cred_err = neuspješno postavljanje kredencijala
err_pam_cred_expired = kredencijali istekli err_pam_cred_expired = kredencijali istekli
@@ -77,6 +77,7 @@ shell = shell
shutdown = ugasi shutdown = ugasi
sleep = uspavaj sleep = uspavaj
toggle_password = prikaži/sakrij lozinku toggle_password = prikaži/sakrij lozinku
wayland = wayland wayland = wayland
x11 = x11 x11 = x11
xinitrc = xinitrc xinitrc = xinitrc

View File

@@ -6,6 +6,7 @@ custom = прилагођено
custom_info_err_output_long = излаз предугачак custom_info_err_output_long = излаз предугачак
custom_info_err_no_output = нема излаза custom_info_err_no_output = нема излаза
custom_info_err_no_output_error = , могућа грешка custom_info_err_no_output_error = , могућа грешка
err_alloc = неуспешна алокација меморије err_alloc = неуспешна алокација меморије
err_args = није могуће рашчланити аргументе командне линије err_args = није могуће рашчланити аргументе командне линије
err_autologin_session = сесија аутоматске пријаве није пронађена err_autologin_session = сесија аутоматске пријаве није пронађена
@@ -33,7 +34,6 @@ err_pam_abort = pam трансакција прекинута
err_pam_acct_expired = налог истекао err_pam_acct_expired = налог истекао
err_pam_auth = грешка при аутентикацији err_pam_auth = грешка при аутентикацији
err_pam_authinfo_unavail = неуспешно узимање информација о кориснику err_pam_authinfo_unavail = неуспешно узимање информација о кориснику
err_pam_authok_reqd = токен истекао
err_pam_buf = грешка бафера меморије err_pam_buf = грешка бафера меморије
err_pam_cred_err = неуспешно постављање акредитива err_pam_cred_err = неуспешно постављање акредитива
err_pam_cred_expired = акредитиви истекли err_pam_cred_expired = акредитиви истекли
@@ -77,6 +77,7 @@ shell = shell
shutdown = угаси shutdown = угаси
sleep = успавај sleep = успавај
toggle_password = прикажи/сакриј лозинку toggle_password = прикажи/сакриј лозинку
wayland = wayland wayland = wayland
x11 = x11 x11 = x11
xinitrc = xinitrc xinitrc = xinitrc

View File

@@ -6,6 +6,7 @@ custom = anpassad
custom_info_err_output_long = utdata för lång custom_info_err_output_long = utdata för lång
custom_info_err_no_output = ingen utdata custom_info_err_no_output = ingen utdata
custom_info_err_no_output_error = , möjligt fel custom_info_err_no_output_error = , möjligt fel
err_alloc = minnesallokering misslyckades err_alloc = minnesallokering misslyckades
err_args = tolkning av kommandoargument misslyckades err_args = tolkning av kommandoargument misslyckades
err_autologin_session = autologin-session hittades inte err_autologin_session = autologin-session hittades inte
@@ -33,7 +34,6 @@ err_pam_abort = pam-transaktion avbröts
err_pam_acct_expired = kontot har löpt ut err_pam_acct_expired = kontot har löpt ut
err_pam_auth = autentisering misslyckades err_pam_auth = autentisering misslyckades
err_pam_authinfo_unavail = hämtning av användarinformation misslyckades err_pam_authinfo_unavail = hämtning av användarinformation misslyckades
err_pam_authok_reqd = token har löpt ut
err_pam_buf = minnesbufferfel err_pam_buf = minnesbufferfel
err_pam_cred_err = inställning av inloggningsuppgifter misslyckades err_pam_cred_err = inställning av inloggningsuppgifter misslyckades
err_pam_cred_expired = inloggningsuppgifterna har löpt ut err_pam_cred_expired = inloggningsuppgifterna har löpt ut
@@ -77,6 +77,7 @@ shell = shell
shutdown = stäng av shutdown = stäng av
sleep = viloläge sleep = viloläge
toggle_password = visa/dölj lösenord toggle_password = visa/dölj lösenord
wayland = wayland wayland = wayland
x11 = x11 x11 = x11
xinitrc = xinitrc xinitrc = xinitrc

View File

@@ -6,6 +6,7 @@ custom = özel
custom_info_err_output_long = çıktı çok uzun custom_info_err_output_long = çıktı çok uzun
custom_info_err_no_output = çıktı yok custom_info_err_no_output = çıktı yok
custom_info_err_no_output_error = , olası hata custom_info_err_no_output_error = , olası hata
err_alloc = basarisiz bellek ayirma err_alloc = basarisiz bellek ayirma
err_args = komut satırı argümanları ayrıştırılamıyor err_args = komut satırı argümanları ayrıştırılamıyor
err_autologin_session = otomatik oturum açma oturumu bulunamadı err_autologin_session = otomatik oturum açma oturumu bulunamadı
@@ -33,7 +34,6 @@ err_pam_abort = pam islemi durduruldu
err_pam_acct_expired = hesabin suresi dolmus err_pam_acct_expired = hesabin suresi dolmus
err_pam_auth = kimlik dogrulama hatasi err_pam_auth = kimlik dogrulama hatasi
err_pam_authinfo_unavail = kullanici bilgileri getirilirken hata olustu err_pam_authinfo_unavail = kullanici bilgileri getirilirken hata olustu
err_pam_authok_reqd = suresi dolmus token
err_pam_buf = bellek arabellegi hatasi err_pam_buf = bellek arabellegi hatasi
err_pam_cred_err = kimlik bilgileri ayarlanamadi err_pam_cred_err = kimlik bilgileri ayarlanamadi
err_pam_cred_expired = kimlik bilgilerinin suresi dolmus err_pam_cred_expired = kimlik bilgilerinin suresi dolmus
@@ -77,6 +77,7 @@ shell = shell
shutdown = makineyi kapat shutdown = makineyi kapat
sleep = uykuya al sleep = uykuya al
toggle_password = parolayı göster/gizle toggle_password = parolayı göster/gizle
wayland = wayland wayland = wayland
x11 = x11 x11 = x11
xinitrc = xinitrc xinitrc = xinitrc

View File

@@ -6,6 +6,7 @@ custom = власний
custom_info_err_output_long = вивід занадто довгий custom_info_err_output_long = вивід занадто довгий
custom_info_err_no_output = немає виводу custom_info_err_no_output = немає виводу
custom_info_err_no_output_error = , можлива помилка custom_info_err_no_output_error = , можлива помилка
err_alloc = невдале виділення пам'яті err_alloc = невдале виділення пам'яті
err_args = не вдалося розібрати аргументи командного рядка err_args = не вдалося розібрати аргументи командного рядка
err_autologin_session = сеанс автоматичного входу не знайдено err_autologin_session = сеанс автоматичного входу не знайдено
@@ -33,7 +34,6 @@ err_pam_abort = pam транзакція перервана
err_pam_acct_expired = термін дії акаунту вичерпано err_pam_acct_expired = термін дії акаунту вичерпано
err_pam_auth = помилка автентифікації err_pam_auth = помилка автентифікації
err_pam_authinfo_unavail = не вдалося отримати дані користувача err_pam_authinfo_unavail = не вдалося отримати дані користувача
err_pam_authok_reqd = термін дії токена вичерпано
err_pam_buf = помилка буферу пам'яті err_pam_buf = помилка буферу пам'яті
err_pam_cred_err = не вдалося змінити облікові дані err_pam_cred_err = не вдалося змінити облікові дані
err_pam_cred_expired = термін дії повноважень вичерпано err_pam_cred_expired = термін дії повноважень вичерпано
@@ -77,6 +77,7 @@ shell = оболонка
shutdown = вимкнути shutdown = вимкнути
sleep = сплячий режим sleep = сплячий режим
toggle_password = показати/приховати пароль toggle_password = показати/приховати пароль
wayland = wayland wayland = wayland
x11 = x11 x11 = x11
xinitrc = xinitrc xinitrc = xinitrc

View File

@@ -6,6 +6,7 @@ custom = 自定义
custom_info_err_output_long = 输出过长 custom_info_err_output_long = 输出过长
custom_info_err_no_output = 无输出 custom_info_err_no_output = 无输出
custom_info_err_no_output_error = ,可能有错误 custom_info_err_no_output_error = ,可能有错误
err_alloc = 内存分配失败 err_alloc = 内存分配失败
err_args = 无法解析命令行参数 err_args = 无法解析命令行参数
err_autologin_session = 未找到自动登录会话 err_autologin_session = 未找到自动登录会话
@@ -33,7 +34,6 @@ err_pam_abort = PAM事务已中止
err_pam_acct_expired = 帐户已过期 err_pam_acct_expired = 帐户已过期
err_pam_auth = 身份验证错误 err_pam_auth = 身份验证错误
err_pam_authinfo_unavail = 获取用户信息失败 err_pam_authinfo_unavail = 获取用户信息失败
err_pam_authok_reqd = 口令已过期
err_pam_buf = 内存缓冲区错误 err_pam_buf = 内存缓冲区错误
err_pam_cred_err = 设置凭据失败 err_pam_cred_err = 设置凭据失败
err_pam_cred_expired = 凭据已过期 err_pam_cred_expired = 凭据已过期
@@ -77,6 +77,7 @@ shell = shell
shutdown = 关机 shutdown = 关机
sleep = 睡眠 sleep = 睡眠
toggle_password = 显示/隐藏密码 toggle_password = 显示/隐藏密码
wayland = wayland wayland = wayland
x11 = x11 x11 = x11
xinitrc = xinitrc xinitrc = xinitrc

View File

@@ -6,6 +6,7 @@ custom = 自訂
custom_info_err_output_long = 輸出過長 custom_info_err_output_long = 輸出過長
custom_info_err_no_output = 無輸出 custom_info_err_no_output = 無輸出
custom_info_err_no_output_error = ,可能有錯誤 custom_info_err_no_output_error = ,可能有錯誤
err_alloc = 記憶體配置失敗 err_alloc = 記憶體配置失敗
err_args = 無法解析命令列參數 err_args = 無法解析命令列參數
err_autologin_session = 找不到自動登入工作階段 err_autologin_session = 找不到自動登入工作階段
@@ -33,7 +34,6 @@ err_pam_abort = PAM 交易已中止
err_pam_acct_expired = 帳號已過期 err_pam_acct_expired = 帳號已過期
err_pam_auth = 驗證錯誤 err_pam_auth = 驗證錯誤
err_pam_authinfo_unavail = 取得使用者資訊失敗 err_pam_authinfo_unavail = 取得使用者資訊失敗
err_pam_authok_reqd = 金鑰已過期
err_pam_buf = 記憶體緩衝區錯誤 err_pam_buf = 記憶體緩衝區錯誤
err_pam_cred_err = 設定憑證失敗 err_pam_cred_err = 設定憑證失敗
err_pam_cred_expired = 憑證已過期 err_pam_cred_expired = 憑證已過期
@@ -77,6 +77,7 @@ shell = shell
shutdown = 關機 shutdown = 關機
sleep = 睡眠 sleep = 睡眠
toggle_password = 顯示/隱藏密碼 toggle_password = 顯示/隱藏密碼
wayland = wayland wayland = wayland
x11 = x11 x11 = x11
xinitrc = xinitrc xinitrc = xinitrc

View File

@@ -20,6 +20,7 @@ pub const AuthOptions = struct {
xauth_cmd: []const u8, xauth_cmd: []const u8,
setup_cmd: []const u8, setup_cmd: []const u8,
login_cmd: ?[]const u8, login_cmd: ?[]const u8,
faillock_tally_dir: []const u8,
x_cmd: []const u8, x_cmd: []const u8,
x_vt: ?u8, x_vt: ?u8,
session_pid: std.posix.pid_t, session_pid: std.posix.pid_t,
@@ -29,11 +30,23 @@ pub const AuthOptions = struct {
const PamAppdata = struct { const PamAppdata = struct {
username: []const u8, username: []const u8,
password: []const u8, password: []const u8,
authreq_requested: bool, new_authtok_requested: bool,
authreq_responded: bool, authreq_responded: bool,
new_password: []const u8, new_password: []const u8,
}; };
//https://github.com/linux-pam/linux-pam/blob/master/modules/pam_faillock/faillock.h#L55
const PamFaillockEntry = extern struct {
pub const STATUS_VALID: usize = 0x1;
pub const STATUS_RHOST: usize = 0x2;
pub const STATUS_TTY: usize = 0x4;
source: [52]u8,
reserved: u16,
status: u16,
time: u64,
};
var xorg_pid: std.posix.pid_t = 0; var xorg_pid: std.posix.pid_t = 0;
pub fn xorgSignalHandler(sig: std.posix.SIG) callconv(.c) void { pub fn xorgSignalHandler(sig: std.posix.SIG) callconv(.c) void {
if (xorg_pid > 0) _ = std.c.kill(xorg_pid, sig); if (xorg_pid > 0) _ = std.c.kill(xorg_pid, sig);
@@ -52,7 +65,16 @@ pub fn authenticate(
current_environment: Environment, current_environment: Environment,
login: []const u8, login: []const u8,
password: []const u8, password: []const u8,
maybe_new_password: ?[]const u8,
) !void { ) !void {
const lock_path = try std.fs.path.join(allocator, &.{ options.faillock_tally_dir, login });
defer allocator.free(lock_path);
var faillock_entries: usize = 0;
if (try fileExists(io, lock_path)) {
faillock_entries = try getFaillockEntries(io, lock_path);
}
var tty_buffer: [3]u8 = undefined; var tty_buffer: [3]u8 = undefined;
const tty_str = try std.fmt.bufPrint(&tty_buffer, "{d}", .{options.tty}); const tty_str = try std.fmt.bufPrint(&tty_buffer, "{d}", .{options.tty});
@@ -69,7 +91,7 @@ pub fn authenticate(
var credentials: PamAppdata = .{ var credentials: PamAppdata = .{
.username = login, .username = login,
.password = password, .password = password,
.authreq_requested = false, .new_authtok_requested = false,
.authreq_responded = false, .authreq_responded = false,
.new_password = "", .new_password = "",
}; };
@@ -93,14 +115,23 @@ pub fn authenticate(
// Do the PAM routine // Do the PAM routine
try log_file.info(io, "auth/pam", "authenticating", .{}); try log_file.info(io, "auth/pam", "authenticating", .{});
status = interop.pam.pam_authenticate(handle, 0); status = interop.pam.pam_authenticate(handle, 0);
if (status == interop.pam.PAM_AUTH_ERR and try fileExists(io, lock_path)) {
const new_faillock_entries = try getFaillockEntries(io, lock_path);
if (faillock_entries == new_faillock_entries) {
return error.AccountLocked;
}
}
if (status != interop.pam.PAM_SUCCESS) return pamDiagnose(status); if (status != interop.pam.PAM_SUCCESS) return pamDiagnose(status);
try log_file.info(io, "auth/pam", "validating account", .{}); try log_file.info(io, "auth/pam", "validating account", .{});
status = interop.pam.pam_acct_mgmt(handle, 0); status = interop.pam.pam_acct_mgmt(handle, 0);
if (status == interop.pam.PAM_NEW_AUTHTOK_REQD) { if (status == interop.pam.PAM_NEW_AUTHTOK_REQD) {
// credentials.authreq_requested = true; if (maybe_new_password) |new_passwsord| {
// credentials.new_password = ""; credentials.new_authtok_requested = true;
// status = interop.pam.pam_chauthtok(handle, interop.pam.PAM_CHANGE_EXPIRED_AUTHTOK); credentials.new_password = new_passwsord;
status = interop.pam.pam_chauthtok(handle, interop.pam.PAM_CHANGE_EXPIRED_AUTHTOK);
}
} }
if (status != interop.pam.PAM_SUCCESS) return pamDiagnose(status); if (status != interop.pam.PAM_SUCCESS) return pamDiagnose(status);
@@ -185,6 +216,38 @@ pub fn authenticate(
if (shared_err.readError()) |err| return err; if (shared_err.readError()) |err| return err;
} }
fn fileExists(io: std.Io, path: []const u8) !bool {
var file = std.Io.Dir.openFileAbsolute(io, path, .{}) catch |err| {
if (err == error.FileNotFound) return false;
return err;
};
defer file.close(io);
return true;
}
fn getFaillockEntries(io: std.Io, path: []const u8) !usize {
var file = try std.Io.Dir.openFileAbsolute(io, path, .{});
defer file.close(io);
var buffer: [1024]u8 = undefined;
var reader = file.reader(io, &buffer);
var count: usize = 0;
while (!reader.atEnd()) {
const entry = reader.interface.takeStruct(PamFaillockEntry, .little) catch |err| {
if (err == error.EndOfStream) break;
return err;
};
if (entry.status & PamFaillockEntry.STATUS_VALID != 0) {
count += 1;
}
}
return count;
}
fn startSession( fn startSession(
log_file: *LogFile, log_file: *LogFile,
allocator: std.mem.Allocator, allocator: std.mem.Allocator,
@@ -334,7 +397,7 @@ fn loginConv(
}, },
interop.pam.PAM_PROMPT_ECHO_OFF => { interop.pam.PAM_PROMPT_ECHO_OFF => {
var pass = data.password; var pass = data.password;
if (data.authreq_requested) { if (data.new_authtok_requested) {
if (data.authreq_responded) { if (data.authreq_responded) {
pass = data.new_password; pass = data.new_password;
} }

View File

@@ -59,6 +59,7 @@ dur_y_offset: i32 = 0,
edge_margin: u8 = 0, edge_margin: u8 = 0,
error_bg: u32 = 0x00000000, error_bg: u32 = 0x00000000,
error_fg: u32 = 0x01FF0000, error_fg: u32 = 0x01FF0000,
faillock_tally_dir: []const u8 = "/var/run/faillock",
fg: u32 = 0x00FFFFFF, fg: u32 = 0x00FFFFFF,
full_color: bool = true, full_color: bool = true,
gameoflife_fg: u32 = 0x0000FF00, gameoflife_fg: u32 = 0x0000FF00,

View File

@@ -1,5 +1,5 @@
// //
// NOTE: After editing this file, please run `/res/lang/normalize_lang_files.py` // NOTE: After editing this file, please run `res/lang/normalize_lang_files.py`
// to update all the language files accordingly. // to update all the language files accordingly.
// //
@@ -11,6 +11,7 @@ custom: []const u8 = "custom",
custom_info_err_output_long: []const u8 = "output too long", custom_info_err_output_long: []const u8 = "output too long",
custom_info_err_no_output: []const u8 = "no output", custom_info_err_no_output: []const u8 = "no output",
custom_info_err_no_output_error: []const u8 = ", possible error", custom_info_err_no_output_error: []const u8 = ", possible error",
err_acc_locked: []const u8 = "account locked, too many attempts",
err_alloc: []const u8 = "failed memory allocation", err_alloc: []const u8 = "failed memory allocation",
err_args: []const u8 = "unable to parse command line arguments", err_args: []const u8 = "unable to parse command line arguments",
err_autologin_session: []const u8 = "autologin session not found", err_autologin_session: []const u8 = "autologin session not found",
@@ -38,7 +39,6 @@ err_pam_abort: []const u8 = "pam transaction aborted",
err_pam_acct_expired: []const u8 = "account expired", err_pam_acct_expired: []const u8 = "account expired",
err_pam_auth: []const u8 = "authentication error", err_pam_auth: []const u8 = "authentication error",
err_pam_authinfo_unavail: []const u8 = "failed to get user info", err_pam_authinfo_unavail: []const u8 = "failed to get user info",
err_pam_authok_reqd: []const u8 = "token expired",
err_pam_buf: []const u8 = "memory buffer error", err_pam_buf: []const u8 = "memory buffer error",
err_pam_cred_err: []const u8 = "failed to set credentials", err_pam_cred_err: []const u8 = "failed to set credentials",
err_pam_cred_expired: []const u8 = "credentials expired", err_pam_cred_expired: []const u8 = "credentials expired",
@@ -82,6 +82,7 @@ shell: [:0]const u8 = "shell",
shutdown: []const u8 = "shutdown", shutdown: []const u8 = "shutdown",
sleep: []const u8 = "sleep", sleep: []const u8 = "sleep",
toggle_password: []const u8 = "toggle password", toggle_password: []const u8 = "toggle password",
token_expired: []const u8 = "password expired, please reset",
wayland: []const u8 = "wayland", wayland: []const u8 = "wayland",
x11: []const u8 = "x11", x11: []const u8 = "x11",
xinitrc: [:0]const u8 = "xinitrc", xinitrc: [:0]const u8 = "xinitrc",

View File

@@ -232,9 +232,7 @@ pub fn configFieldHandler(_: std.mem.Allocator, field: ini.IniField) ?ini.IniFie
// on the progress of said interface, only to find out afterwards // on the progress of said interface, only to find out afterwards
// that you have PROCRASTINATED on the efforts meant to enhance // that you have PROCRASTINATED on the efforts meant to enhance
// configuration. Thus the requirement for this reminder larger // configuration. Thus the requirement for this reminder larger
// compared to the two reminders regarding better methods of // compared to the one regarding better methods of X termination.
// X termination detection and new usernames with existing
// save files.
// //
// Thus is my que to leave this TODO at thy request, // Thus is my que to leave this TODO at thy request,
// //

View File

@@ -113,6 +113,7 @@ const UiState = struct {
login_text: ?*Text, login_text: ?*Text,
password: *Text, password: *Text,
password_widget: *Widget, password_widget: *Widget,
maybe_old_password: ?[]const u8,
insert_mode: bool, insert_mode: bool,
edge_margin: Position, edge_margin: Position,
config: Config, config: Config,
@@ -889,6 +890,9 @@ pub fn main(init: std.process.Init) !void {
); );
defer state.password_label.deinit(); defer state.password_label.deinit();
state.maybe_old_password = null;
defer if (state.maybe_old_password) |pass| state.allocator.free(pass);
state.insert_mode = !state.config.vi_mode or state.config.vi_default_mode == .insert; state.insert_mode = !state.config.vi_mode or state.config.vi_default_mode == .insert;
state.password = try Text.init( state.password = try Text.init(
@@ -1610,6 +1614,7 @@ fn authenticate(ptr: *anyopaque) !bool {
.xauth_cmd = state.config.xauth_cmd, .xauth_cmd = state.config.xauth_cmd,
.setup_cmd = state.config.setup_cmd, .setup_cmd = state.config.setup_cmd,
.login_cmd = state.config.login_cmd, .login_cmd = state.config.login_cmd,
.faillock_tally_dir = state.config.faillock_tally_dir,
.x_cmd = state.config.x_cmd, .x_cmd = state.config.x_cmd,
.x_vt = state.config.x_vt, .x_vt = state.config.x_vt,
.session_pid = session_pid, .session_pid = session_pid,
@@ -1633,7 +1638,8 @@ fn authenticate(ptr: *anyopaque) !bool {
auth_options, auth_options,
current_environment, current_environment,
if (state.login_text) |box| box.text.items else state.login.?.getCurrentUsername(), if (state.login_text) |box| box.text.items else state.login.?.getCurrentUsername(),
password_text, if (state.maybe_old_password) |pass| pass else password_text,
if (state.maybe_old_password != null) password_text else null,
) catch |err| { ) catch |err| {
shared_err.writeError(err); shared_err.writeError(err);
@@ -1645,12 +1651,19 @@ fn authenticate(ptr: *anyopaque) !bool {
std.process.exit(0); std.process.exit(0);
} }
var session_status: c_int = undefined; if (state.maybe_old_password) |pass| {
_ = std.posix.system.waitpid(session_pid, &session_status, 0); state.allocator.free(pass);
// HACK: It seems like the session process is not exiting immediately after the waitpid call. state.maybe_old_password = null;
// This is a workaround to ensure the session process has exited before re-initializing the TTY. }
state.io.sleep(.fromSeconds(1), .real) catch {};
session_pid = -1; if (session_pid != -1) {
var session_status: c_int = undefined;
_ = std.posix.system.waitpid(session_pid, &session_status, 0);
// HACK: It seems like the session process is not exiting immediately after the waitpid call.
// This is a workaround to ensure the session process has exited before re-initializing the TTY.
state.io.sleep(.fromSeconds(1), .real) catch {};
session_pid = -1;
}
try state.log_file.reinit(state.io); try state.log_file.reinit(state.io);
} }
@@ -1658,7 +1671,20 @@ fn authenticate(ptr: *anyopaque) !bool {
try state.buffer.reclaim(); try state.buffer.reclaim();
const auth_err = shared_err.readError(); const auth_err = shared_err.readError();
if (auth_err) |err| { if (auth_err) |err| handle_error: {
if (err == error.PamNewAuthTokenRequired) {
try state.info_line.addMessage(
state.lang.token_expired,
state.config.bg,
state.config.fg,
);
state.maybe_old_password = try state.allocator.dupe(u8, state.password.text.items);
state.password.clear();
state.is_autologin = false;
break :handle_error;
}
state.auth_fails += 1; state.auth_fails += 1;
state.buffer.setActiveWidget(state.password_widget); state.buffer.setActiveWidget(state.password_widget);
@@ -2611,12 +2637,12 @@ fn getAuthErrorMsg(err: anyerror, lang: Lang) []const u8 {
error.PamCredentialsInsufficient => lang.err_pam_cred_insufficient, error.PamCredentialsInsufficient => lang.err_pam_cred_insufficient,
error.PamCredentialsUnavailable => lang.err_pam_cred_unavail, error.PamCredentialsUnavailable => lang.err_pam_cred_unavail,
error.PamMaximumTries => lang.err_pam_maxtries, error.PamMaximumTries => lang.err_pam_maxtries,
error.PamNewAuthTokenRequired => lang.err_pam_authok_reqd,
error.PamPermissionDenied => lang.err_pam_perm_denied, error.PamPermissionDenied => lang.err_pam_perm_denied,
error.PamSessionError => lang.err_pam_session, error.PamSessionError => lang.err_pam_session,
error.PamSystemError => lang.err_pam_sys, error.PamSystemError => lang.err_pam_sys,
error.PamUserUnknown => lang.err_pam_user_unknown, error.PamUserUnknown => lang.err_pam_user_unknown,
error.PamAbort => lang.err_pam_abort, error.PamAbort => lang.err_pam_abort,
error.AccountLocked => lang.err_acc_locked,
else => @errorName(err), else => @errorName(err),
}; };
} }