[Pkg-shadow-devel] [Git][debian/adduser][wip/fixup_existing] 9 commits: po: Add Georgian translation
Marc Haber (@zugschlus)
gitlab at salsa.debian.org
Thu Jan 15 19:14:25 GMT 2026
Marc Haber pushed to branch wip/fixup_existing at Debian / adduser
Commits:
3c3ce5fc by Temuri Doghonadze at 2026-01-15T19:57:32+01:00
po: Add Georgian translation
Thanks: Temuri Doghonadze
- - - - -
d5820aed by Marc Haber at 2026-01-15T20:14:14+01:00
rework EXISTING_ and existing_user_status
this redefines the EXISTING variables
simplifies the EXISTING states (they were overengineered and redundant)
reworks existing_user_status, improving logic and output
The new variable values are also read by the test suites and need to be
in sync
Thanks: Matt Barry
- - - - -
7411b944 by Marc Haber at 2026-01-15T20:14:14+01:00
move Marc's test10.pl to test11.pl to make Room
Git-Dch: ignore
- - - - -
6fd5b276 by Marc Haber at 2026-01-15T20:14:14+01:00
add vim helper line to testsuite files
The files need to be reflowed when working on them next time
Git-Dch: ignore
- - - - -
85ab6531 by Marc Haber at 2026-01-15T20:14:14+01:00
prepare upstream testsuite for EXISTING_
Git-Dch: ignore
- - - - -
a564b059 by Marc Haber at 2026-01-15T20:14:14+01:00
various fixes in lib_test.pm
Git-Dch: ignore
- - - - -
b4d7296f by Marc Haber at 2026-01-15T20:14:14+01:00
rework runsuite.sh
This now allows running a single test, and cleans up better
Git-Dch: ignore
- - - - -
dc304334 by Marc Haber at 2026-01-15T20:14:14+01:00
make more clear that failure was expected
Git-Dch: ignore
- - - - -
d8b8b515 by Marc Haber at 2026-01-15T20:14:14+01:00
fix testsuite warning in test08.pl
Git-Dch: ignore
- - - - -
14 changed files:
- AdduserCommon.pm
- + po/ka.po
- testsuite/lib_test.pm
- testsuite/runsuite.sh
- testsuite/test01.pl
- testsuite/test02.pl
- testsuite/test03.pl
- testsuite/test04.pl
- testsuite/test05.pl
- testsuite/test06.pl
- testsuite/test07.pl
- testsuite/test08.pl
- testsuite/test09.pl
- testsuite/test10.pl → testsuite/test11.pl
Changes:
=====================================
AdduserCommon.pm
=====================================
@@ -102,6 +102,14 @@ use constant {
EXISTING_ID_MISMATCH => 4,
EXISTING_LOCKED => 8,
EXISTING_HAS_PASSWORD => 16,
+ EXISTING_EXPIRED => 32,
+ EXISTING_NOLOGIN => 64,
+};
+
+use constant {
+ STDOUTDEFLEVEL => "warn",
+ STDERRDEFLEVEL => "warn",
+ LOGMSGDEFLEVEL => "info",
};
@EXPORT = (
@@ -138,6 +146,11 @@ use constant {
'EXISTING_ID_MISMATCH',
'EXISTING_LOCKED',
'EXISTING_HAS_PASSWORD',
+ 'EXISTING_EXPIRED',
+ 'EXISTING_NOLOGIN',
+ 'STDOUTDEFLEVEL',
+ 'STDERRDEFLEVEL',
+ 'LOGMSGDEFLEVEL',
'existing_user_status',
'existing_group_status',
);
@@ -590,35 +603,47 @@ END {
# new_name: the name of the user to check
# new_uid : the UID of the user
# return value:
-# bitwise combination of these constants:
-# EXISTING_NOT_FOUND => 0
-# EXISTING_FOUND => 1
-# EXISTING_SYSTEM => 2
-# EXISTING_ID_MISMATCH => 4
-# EXISTING_LOCKED => 8
-# EXISTING_HAS_PASSWORD => 16
-# e.g. if the requested account name exists as a locked system user,
-# return 8|2|1 == 11
+# bitwise combination of the EXISTING_ constants
sub existing_user_status {
- my ($config, $new_name,$new_uid) = @_;
- my ($dummy1,$pw,$uid);
+ my ($config, $user_name,$user_uid) = @_;
my $ret = EXISTING_NOT_FOUND;
- log_trace( "existing_user_status called with new_name %s, new_uid %s, first_system_uid %s, last_system_uid %s", $new_name, $new_uid, $config->{"first_system_uid"}, $config->{"last_system_uid"} );
- if (($dummy1,$pw,$uid) = egetpwnam($new_name)) {
+ log_trace( "existing_user_status called with user_name %s, user_uid %s, first_system_uid %s, last_system_uid %s", $user_name, $user_uid, $config->{"first_system_uid"}, $config->{"last_system_uid"} );
+
+ # collect user data
+ my (
+ $egpwn_name, $egpwn_passwd, $egpwn_uid, $egpwn_gid, $egpwn_quota,
+ $egpwn_comment, $egpwn_gcos, $egpwn_dir, $egpwn_shell, $egpwn_expire,
+ $egpwn_rest
+ ) = egetpwnam($user_name);
+ my $shadow_line = `getent shadow $user_name`;
+ chomp $shadow_line;
+ my @shadow_fields = split /:/, $shadow_line;
+ if (defined $egpwn_uid) {
# user with the name exists
- log_trace( "egetpwnam(%s) returns %s, %s, %s", $new_name, $dummy1, $pw, $uid );
+ log_trace( "egetpwnam(%s) returns %s, %s, %s, %s", $user_name, $egpwn_passwd, $egpwn_uid, $egpwn_dir, $egpwn_shell );
$ret |= EXISTING_FOUND;
- $ret |= EXISTING_ID_MISMATCH if (defined($new_uid) && $uid != $new_uid);
+ $ret |= EXISTING_ID_MISMATCH if (defined($user_uid) && $egpwn_uid != $user_uid);
$ret |= EXISTING_SYSTEM if
- (($uid >= $config->{"first_system_uid"}) && ($uid <= $config->{"last_system_uid"}));
+ (($egpwn_uid >= $config->{"first_system_uid"}) && ($egpwn_uid <= $config->{"last_system_uid"}));
$ret |= EXISTING_HAS_PASSWORD if
- (defined $pw && $pw ne '' && $pw ne '!' && $pw !~ /^\*/);
- $ret |= EXISTING_LOCKED if (substr($pw,0,1) eq "!"); # TODO: also check expiry?
- } elsif ($new_uid && getpwuid($new_uid)) {
+ (defined $egpwn_passwd && $egpwn_passwd ne '' && ($egpwn_passwd =~ s/^[!*]+//r ne ''));
+
+ my $password_field = $shadow_fields[1] // '';
+ $ret |= EXISTING_LOCKED if $password_field =~ /^[!*]/;
+
+ $ret |= EXISTING_NOLOGIN if ($egpwn_shell =~ /bin\/nologin/);
+
+ my $acct_exp = $shadow_fields[7] // '';
+ if ($acct_exp && $acct_exp > 0) {
+ my $today_days = int(time / 86400);
+ $ret |= EXISTING_EXPIRED if $acct_exp < $today_days;
+ }
+
+ } elsif (defined($user_uid) && getpwuid($user_uid)) {
# user with the uid exists
$ret |= EXISTING_ID_MISMATCH;
}
- log_trace( "existing_user_status( %s, %s ) returns %s", $new_name, $new_uid, $ret );
+ log_trace( "existing_user_status( %s, %s ) returns %s (%s)", $user_name, $user_uid, $ret, existing_value_desc($ret) );
return $ret;
}
@@ -634,23 +659,37 @@ sub existing_user_status {
# EXISTING_ID_MISMATCH => 4
sub existing_group_status {
my ($config, $new_name,$new_gid) = @_;
- my ($dummy1,$dummy2,$gid);
+ my ($gid);
my $ret = EXISTING_NOT_FOUND;
log_trace( "existing_group_status called with new_name %s, new_gid %s", $new_name, $new_gid );
- if (($dummy1,$dummy2,$gid) = egetgrnam($new_name)) {
+ if ((undef,undef,$gid) = egetgrnam($new_name)) {
# group with the name exists
log_trace("egetgrnam %s returned successfully, gid = %s", $new_name, $gid);
$ret |= EXISTING_FOUND;
$ret |= EXISTING_ID_MISMATCH if (defined($new_gid) && $gid != $new_gid);
$ret |= EXISTING_SYSTEM if
(($gid >= $config->{"first_system_gid"}) && ($gid <= $config->{"last_system_gid"}));
- } elsif ($new_gid && getgrgid($new_gid)) {
+ } elsif (defined($new_gid) && getgrgid($new_gid)) {
$ret |= EXISTING_ID_MISMATCH;
}
- log_trace( "existing_group_status( %s, %s ) returns %s", $new_name, $new_gid, $ret );
+ log_trace( "existing_group_status( %s, %s ) returns %s (%s)", $new_name, $new_gid, $ret, existing_value_desc($ret) );
return $ret;
}
+sub existing_value_desc {
+ my ($val) = @_;
+ my @flags = ();
+ push @flags, "found" if ($val & EXISTING_FOUND);
+ push @flags, "wrongid" if $val & EXISTING_ID_MISMATCH;
+ push @flags, "system" if ($val & EXISTING_SYSTEM);
+ push @flags, "locked" if $val & EXISTING_LOCKED;
+ push @flags, "haspass" if $val & EXISTING_HAS_PASSWORD;
+ push @flags, "nologin" if $val & EXISTING_NOLOGIN;
+ push @flags, "expired" if $val & EXISTING_EXPIRED;
+ push @flags, "notfound" unless $#flags > 0;
+ return join '|', at flags
+}
+
1;
# Local Variables:
=====================================
po/ka.po
=====================================
@@ -0,0 +1,905 @@
+# Translation of adduser program into LANGUAGE
+# Files: po/adduser.pot doc/po4a/po/adduser.pot
+# Copyright: 1994 Debian Association, Inc.
+# 1995 Ian A. Murdock <imurdock at debian.org>
+# 1995 Ted Hajek <tedhajek at boombox.micro.umn.edu>
+# 1997-1999 Guy Maor <maor at debian.org>
+# 2000-2004 Roland Bauerschmidt <rb at debian.org>
+# 2004-2025 Marc Haber <mh+debian-packages at zugschlus.de>
+# 2005-2009 Jörg Hoh <joerg at joerghoh.de>
+# 2006-2011 Stephen Gran <sgran at debian.org>
+# 2016-2017 Afif Elghraoui <afif at debian.org>
+# 2016, 2023 Dr. Helge Kreutzmann <debian at helgefjell.de>
+# 2016 Nis Martensen <nis.martensen at web.de>
+# 2021-2022 Jason Franklin <jason at oneway.dev>
+# 2022 Matt Barry <matt at hazelmollusk.org>
+# 2023 Guillem Jover <guillem at debian.org>
+# License: GPL-2+
+#
+# This file is distributed under the same license as the adduser package.
+# Temuri Doghonadze <temuri.doghonadze at gmail.com>, 2026.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: adduser 3.153~\n"
+"Report-Msgid-Bugs-To: adduser at packages.debian.org\n"
+"POT-Creation-Date: 2025-09-14 13:07+0200\n"
+"PO-Revision-Date: 2026-01-15 12:44+0100\n"
+"Last-Translator: Temuri Doghonadze <temuri.doghonadze at gmail.com>\n"
+"Language-Team: Georgian <(nothing)>\n"
+"Language: ka\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 3.8\n"
+
+#: adduser:229
+msgid "Only root may add a user or group to the system."
+msgstr ""
+"სისტემაში მომხმარებლებისა და ჯგუფების დამატება, მხოლოდ, root-ს შეუძლია."
+
+#: adduser:266 deluser:200
+msgid "No options allowed after names."
+msgstr "სახელების შემდეგ პარამეტრები დაშვებული არა."
+
+#: adduser:275 deluser:208
+msgid "Only one or two names allowed."
+msgstr "დაშვებულია, მხოლოდ, ერთი, ან ორი სახელი."
+
+#: adduser:282
+msgid "Specify only one name in this mode."
+msgstr "ამ რეჟიმში, მხოლოდ, ერთი სახელის მითითებაა შესაძლებელი."
+
+#: adduser:286
+msgid "addgroup with two arguments is an unspecified operation."
+msgstr "addgroup ორი არგუმენტით მიუთითებელი ოპერაციაა."
+
+#: adduser:318
+msgid "The --group, --ingroup, and --gid options are mutually exclusive."
+msgstr "პარამეტრები --group, --ingroup და --gid ურთიერთგამომრიცხავია."
+
+#: adduser:403
+msgid "The home dir must be an absolute path."
+msgstr "საწყისი საქაღალდე აბსოლუტური ბილიკი უნდა იყოს."
+
+#: adduser:445
+#, perl-format
+msgid "The group `%s' already exists, but has a different GID. Exiting."
+msgstr "ჯგუფი '%s' უკვე არსებობს, მაგრამ სხვა GID-ით. გასვლა."
+
+#: adduser:451
+#, perl-format
+msgid "The group `%s' already exists as a system group."
+msgstr "ჯგუფი '%s' უკვე არსებობს სისტემური ჯგუფის სახით."
+
+#: adduser:454
+#, perl-format
+msgid "The group `%s' already exists and is not a system group. Exiting."
+msgstr "ჯგუფი '%s' უკვე არსებობს და სისტემური სისტემური ჯგუფი არაა."
+
+#: adduser:459 adduser:499
+#, perl-format
+msgid "The GID `%s' is already in use."
+msgstr "GID '%s' უკვე გამოიყენება."
+
+#: adduser:470
+#, perl-format
+msgid "No GID is available in the range %d-%d (FIRST_SYS_GID - LAST_SYS_GID)."
+msgstr "შუალედში %d-%d (FIRST_SYS_GID - LAST_SYS_GID) GID ხელმისაწვდომი არაა."
+
+#: adduser:472 adduser:518
+#, perl-format
+msgid "The group `%s' was not created."
+msgstr "ჯგუფი `%s' არ შექმნილა."
+
+#: adduser:478 adduser:523
+#, perl-format
+msgid "Adding group `%s' (GID %d) ..."
+msgstr "ჯგუფის `%s' (GID %d) დამატება..."
+
+#: adduser:495 adduser:1232
+#, perl-format
+msgid "The group `%s' already exists."
+msgstr "ჯგუფი '%s' უკვე არსებობს."
+
+#: adduser:516
+#, perl-format
+msgid "No GID is available in the range %d-%d (FIRST_GID - LAST_GID)."
+msgstr "შუალედში %d-%d ((FIRST_GID - LAST_GID) GID ხელმისაწვდომი არაა."
+
+#: adduser:540 deluser:296
+#, perl-format
+msgid "The user `%s' does not exist."
+msgstr "მომხმარებელი '%s' არ არსებობს."
+
+#: adduser:544 adduser:1009 adduser:1242 deluser:456 deluser:459
+#, perl-format
+msgid "The group `%s' does not exist."
+msgstr "ჯგუფი \"%s\" არ არსებობს."
+
+#: adduser:549 adduser:1013
+#, perl-format
+msgid "The user `%s' is already a member of `%s'."
+msgstr "მომხმარებელი '%s' უკვე არის '%s'-ის წევრი."
+
+#: adduser:553 adduser:1019
+#, perl-format
+msgid "Adding user `%s' to group `%s' ..."
+msgstr "მომხმარებლის '%s' ჩამატება ჯგუფში '%s'..."
+
+#: adduser:571
+#, perl-format
+msgid "The user `%s' already exists, but is not a system user. Exiting."
+msgstr ""
+"მომხმარებელი %s უკვე არსებობს, მაგრამ სისტემური მომხმარებელი არაა. გასვლა."
+
+#: adduser:575
+#, perl-format
+msgid "The user `%s' already exists with a different UID. Exiting."
+msgstr "მომხმარებელი '%s' უკვე არსებობს, მაგრამ სხვა UID-ით. გასვლა."
+
+#: adduser:579
+#, perl-format
+msgid "The system user `%s' already exists. Exiting.\n"
+msgstr "სისტემური მომხმარებელი '%s' უკვე არსებობს.\n"
+
+#: adduser:593
+#, perl-format
+msgid ""
+"No UID/GID pair is available in the range %d-%d (FIRST_SYS_UID - "
+"LAST_SYS_UID)."
+msgstr ""
+"შუალედში %d-%d (FIRST_SYS_UID - LAST_SYS_UID) UID/GID წყვილები ხელმისაწვდომი "
+"არაა."
+
+#: adduser:596 adduser:612 adduser:712 adduser:826 adduser:832
+#, perl-format
+msgid "The user `%s' was not created."
+msgstr "მომხმარებელი \"%s\" არ შექმნილა."
+
+#: adduser:609
+#, perl-format
+msgid "No UID is available in the range %d-%d (FIRST_SYS_UID - LAST_SYS_UID)."
+msgstr ""
+"შუალედში %d-%d (FIRST_SYS_UID - LAST_SYS_UID) UID-ები ხელმისაწვდომი არაა."
+
+#: adduser:620
+msgid "Neither ingroup option nor gid given."
+msgstr "მითითებულია არც პარამეტრი ingroup, არც GID."
+
+#: adduser:632
+msgid "Neither ingroup option nor gid given and make_group_also unset."
+msgstr ""
+"მითითებულია არც პარამეტრი ingroup, არც GID და make_group_also დაყენებული "
+"არაა."
+
+#: adduser:636
+#, perl-format
+msgid "Adding system user `%s' (UID %d) ..."
+msgstr "ემატება სისტემური მომხმარებელი `%s' (UID %d) ..."
+
+#: adduser:640
+#, perl-format
+msgid "Adding new group `%s' (GID %d) ..."
+msgstr "ემატება ახალი ჯგუფი `%s' (GID %d) ..."
+
+#: adduser:651 adduser:897
+#, perl-format
+msgid "The home dir %s you specified already exists.\n"
+msgstr "საწყისი საქაღალდე %s, რომელიც მიუთითეთ, უკვე არსებობს.\n"
+
+#: adduser:654 adduser:900
+#, perl-format
+msgid "The home dir %s you specified can't be accessed: %s\n"
+msgstr "საწყის საქაღალდესთან %s, რომელიც მიუთითეთ, წვდომა შეუძლებელია: %s\n"
+
+#: adduser:658
+#, perl-format
+msgid "Adding new user `%s' (UID %d) with group `%s' ..."
+msgstr "ემატება ახალი მომხმარებელი `%s' (UID %d) ჯგუფით `%s' ..."
+
+#: adduser:711
+msgid ""
+"USERS_GID and USERS_GROUP both given in configuration. This is an error."
+msgstr ""
+"კონფიგურაციაში მითითებულია ორივე, USERS_GID და USERS_GROUP. ეს შეცდომაა."
+
+#: adduser:802
+#, perl-format
+msgid "Adding user `%s' ..."
+msgstr "ემატება მომხმარებელი `%s' ..."
+
+#: adduser:825
+#, perl-format
+msgid "No UID/GID pair is available in the range %d-%d (FIRST_UID - LAST_UID)."
+msgstr ""
+"შუალედში %d-%d (FIRST_UID - LAST_UID) UID/GID წყვილები ხელმისაწვდომი არაა."
+
+#: adduser:831
+msgid ""
+"USERGROUPS=no, USER_GID=-1 and USERS_GROUP empty. A user needs a primary "
+"group!"
+msgstr ""
+"USERGROUPS=no, USER_GID=-1 და USERS_GROUP ცარიელია. მომხმარებელს ძირითადი "
+"ჯგუფი სჭირდება!"
+
+#: adduser:871
+msgid "Internal error interpreting parameter combination"
+msgstr "პარამეტრების კომბინაციის ინტერპრეტაციის შიდა შეცდომა"
+
+#: adduser:882
+#, perl-format
+msgid "Adding new group `%s' (%d) ..."
+msgstr "ემატება ახალი ჯგუფი `%s' (%d) ..."
+
+#: adduser:885
+#, perl-format
+msgid "Adding new group `%s' (new group ID) ..."
+msgstr "ემატება ახალი ჯგუფი `%s' (ახალი ჯგუფის ID) ..."
+
+#: adduser:888
+#, perl-format
+msgid "new group '%s' created with GID %d"
+msgstr "შეიქმნა ახალი ჯგუფი '%s' GID-ით %d"
+
+#: adduser:907
+#, perl-format
+msgid "Adding new user `%s' (%d) with group `%s (%d)' ..."
+msgstr "ემატება ახალი მომხმარებელი `%s' (%d) ჯგუფით `%s (%d)' ..."
+
+#: adduser:944
+msgid "Permission denied"
+msgstr "წვდომა აკრძალულია"
+
+#: adduser:946
+msgid "invalid combination of options"
+msgstr "პარამეტრების არასწორი კომბინაცია"
+
+#: adduser:948
+msgid "unexpected failure, nothing done"
+msgstr "მოულოდნელი ჩავარდნა. არაფერი გაკეთებულა"
+
+#: adduser:950
+msgid "unexpected failure, passwd file missing"
+msgstr "მოულოდნელი ჩავარდნა. ფაილი passwd აღმოჩენილი არაა"
+
+#: adduser:952
+msgid "passwd file busy, try again"
+msgstr "ფაილი passwd დაკავებულია. კიდევ სცადეთ"
+
+#: adduser:954
+msgid "invalid argument to option"
+msgstr "არასწორი არგუმენტი პარამეტრისთვის"
+
+#: adduser:956
+msgid "wrong password given or password retyped incorrectly"
+msgstr "გადაცემული პაროლი არასწორია, ან პაროლი გამეორებით არასწორად აკრიფეთ"
+
+#: adduser:958
+#, perl-format
+msgid "unexpected return code %s given from passwd"
+msgstr "passwd-დან დაბრუნდა მოულოდნელი დაბრუნების კოდი %s"
+
+#: adduser:965
+msgid "Try again? [y/N] "
+msgstr "ვცადო კიდევ ერთხელ? [y(დიახ)/N(არა)] "
+
+#: adduser:991
+msgid "Is the information correct? [Y/n] "
+msgstr "ეს ინფორმაცია სწორია? [Y/n] "
+
+#: adduser:1005
+#, perl-format
+msgid "Adding new user `%s' to supplemental / extra groups `%s' ..."
+msgstr "მომხმარებლის `%s' ჩამატება დამატებით ჯგუფებში `%s' ..."
+
+#: adduser:1029
+#, perl-format
+msgid "Setting quota for user `%s' to values of user `%s' ..."
+msgstr ""
+"კვოტის დაყენება მომხმარებლისთვის `%s' მნიშვნელობებზე მომხმარებლიდან`%s' ..."
+
+#: adduser:1067
+#, perl-format
+msgid "Not creating `%s'."
+msgstr "`%s' არ შეიქმნება."
+
+#: adduser:1069
+#, perl-format
+msgid "Not creating home directory `%s' as requested."
+msgstr "როგორც მოთხოვნილია, საწყისი საქაღალდე `%s' არ შეიქმნება."
+
+#: adduser:1072
+#, perl-format
+msgid "The home directory `%s' already exists. Not touching this directory."
+msgstr "საწყისის საქაღალდე '%s' უკვე არსებობს. საქაღალდეს ხელი არ დაედება."
+
+#: adduser:1078
+#, perl-format
+msgid ""
+"Warning: The home directory `%s' does not belong to the user you are "
+"currently creating."
+msgstr ""
+"გაფრთხილება; საწყისი საქაღალდე '%s' არ ეკუთვნის მომხმარებელს, რომელიც ახლა "
+"იქმნება."
+
+#: adduser:1082
+#, perl-format
+msgid "Creating home directory `%s' ..."
+msgstr "იქმნება საწყისი საქაღალდე `%s' ..."
+
+#: adduser:1085
+#, perl-format
+msgid "Couldn't create home directory `%s': %s."
+msgstr "ვერ შევქმენი საწყისი საქაღალდე '%s': %s."
+
+#: adduser:1099
+#, perl-format
+msgid "Copying files from `%s' ..."
+msgstr "`%s'-დან ფაილების კოპირება ..."
+
+#: adduser:1102
+#, perl-format
+msgid "fork for `find' failed: %s"
+msgstr "fork() ბრძანებისთვის `find' ჩავარდა: %s"
+
+#: adduser:1214
+#, perl-format
+msgid "The user `%s' already exists, and is not a system user."
+msgstr "მომხმარებელი '%s' უკვე არსებობს, მაგრამ სისტემური მომხმარებელი არაა."
+
+#: adduser:1223
+#, perl-format
+msgid "The user `%s' already exists."
+msgstr "მომხმარებელი '%s' უკვე არსებობს."
+
+#: adduser:1236
+#, perl-format
+msgid "The GID %d is already in use."
+msgstr "GID %d უკვე გამოიყენება."
+
+#: adduser:1246
+#, perl-format
+msgid "No group with GID %d found."
+msgstr "ჯგუფი GID-ით %d აღმოჩენილი არაა."
+
+#: adduser:1315
+#, perl-format
+msgid "%s/%s is neither a dir, file, nor a symlink."
+msgstr "%s/%s არც საქაღალდეა, არც ფაილი, არც სიმბმული."
+
+#: adduser:1348
+msgid ""
+"To avoid ambiguity with numerical UIDs, usernames whichresemble numbers or "
+"negative numbers are not allowed."
+msgstr ""
+"რიცხვით UID-ებთან გაურკვევლობის თავიდან ასაცილებლად მომხმარებლის სახელები, "
+"რომლებიც რიცხვებს, ან უარყოფით რიცხვებს წააგავს, დაშვებული არაა."
+
+#: adduser:1356
+msgid "Usernames must not be a single or a double period."
+msgstr "მომხმარებლის სახელები ერთი ან ორი ჰარე არ უნდა იყოს."
+
+#: adduser:1363
+msgid "Usernames must be no more than 32 bytes in length."
+msgstr "მომხმარებლის სახელები სიგრძეში 32 ბაიტზე მეტი არ უნდა იყოს."
+
+#: adduser:1370
+msgid ""
+"To avoid problems, the username must not start with adash, plus sign, or "
+"tilde, and it must not contain any of thefollowing: colon, comma, slash, or "
+"any whitespace charactersincluding spaces, tabs, and newlines."
+msgstr ""
+"პრობლემების თავიდან ასაცილებლად, მომხმარებლის სახელი არ უნდა იწყებოდეს "
+"ტირეთი, პლუსით, ან ტილდათი და ის არ უნდა შეიცავდეს შემდეგ სიმბოლოებს: "
+"ორწერტილი, მძიმე, დახრილი ხაზი და ნებისმიერ გამოტოვების სიმბოლოს, "
+"როგორებიცაა, ჰარე, ტაბულაცია და ხაზის გადატანა."
+
+#: adduser:1385
+msgid ""
+"To avoid problems, the username should consist only ofletters, digits, "
+"underscores, periods, at signs and dashes, andnot start with a dash (as "
+"defined by IEEE Std 1003.1-2001). Forcompatibility with Samba machine "
+"accounts, $ is also supportedat the end of the username. (Use the `--allow-"
+"all-names' optionto bypass this restriction.)"
+msgstr ""
+"პრობლემების თავიდან ასაცილებლად მომხმარებლის სახელი უნდა შეიცავდეს ლათინურ "
+"ასოებს, ციფრებს, ქვედა ტირეებს, წერტილებს, @ ნიშნებს და ტირეებს და არ უნდა "
+"იწყებოდნენ ტირეთი (აღწერილია სტანდარტში IEEE 1003.1-2001). Samba-ის მანქანის "
+"ანგარიშებთან თავსებადობისთვის $ ასევე მხარდაჭერილია მომხმარებლის სახელის "
+"ბოლოში. (ამ შეზღუდვის თავიდან ასაცილებლად გამოიყენეთ პარამეტრი '--allow-"
+"all-names.)"
+
+#: adduser:1395
+msgid "Allowing use of questionable username."
+msgstr "საეჭვო მომხმარებლის სახელის გამოყენების დაშვება."
+
+#: adduser:1397
+#, perl-format
+msgid ""
+"Please enter a username matching the regular expressionconfigured via the %s "
+"configuration variable. Use the`--allow-bad-names' option to relax this "
+"check or reconfigure%s in configuration."
+msgstr ""
+"შეიყვანეთ მომხმარებლის სახელი, რომელიც ემთხვევა რეგულარულ გამოსახულებას, "
+"რომელიც მორგებულია %s კონფიგურაციის ცვლადით. გამოიყენეთ პარამეტრი '--allow-"
+"bad-names', რომ მოადუნოთ ეს შემოწმება, ან შეცვალეთ %s კონფიგურაციაში."
+
+#: adduser:1426
+#, perl-format
+msgid "Selecting UID from range %d to %d ...\n"
+msgstr "UID-ის არჩევა შუალედიდან %d - %d ...\n"
+
+#: adduser:1449
+#, perl-format
+msgid "Selecting GID from range %d to %d ..."
+msgstr "GID-ის არჩევა შუალედიდან %d - %d ..."
+
+#: adduser:1473
+#, perl-format
+msgid "Selecting UID/GID from range %d to %d ..."
+msgstr "UID/GID-ის არჩევა შუალედიდან %d - %d ..."
+
+#: adduser:1509
+#, perl-format
+msgid "Removing directory `%s' ..."
+msgstr "იშლება საქაღალდე `%s' ..."
+
+#: adduser:1513 deluser:441
+#, perl-format
+msgid "Removing user `%s' ..."
+msgstr "იშლება მომხმარებელი `%s' ..."
+
+#: adduser:1517 deluser:483
+#, perl-format
+msgid "Removing group `%s' ..."
+msgstr "იშლება ჯგუფი `%s' ..."
+
+#: adduser:1527
+#, perl-format
+msgid "Caught a SIG%s."
+msgstr "Caught a SIG%s."
+
+#: adduser:1533
+#, perl-format
+msgid ""
+"adduser version %s\n"
+"\n"
+msgstr ""
+"adduser ვერსია %s\n"
+"\n"
+
+#: adduser:1534
+msgid ""
+"Adds a user or group to the system.\n"
+"\n"
+"For detailed copyright information, please refer to\n"
+"/usr/share/doc/adduser/copyright.\n"
+"\n"
+msgstr ""
+"ამატებს მომხმარებელს ან ჯგუფს სისტემაში.\n"
+"\n"
+"საავტორო უფლებების შესახებ დეტალური ინფორმაციისთვის იხილეთ ბმული\n"
+"/usr/share/doc/adduser/copyright.\n"
+"\n"
+
+#: adduser:1540 deluser:543
+msgid ""
+"This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or (at\n"
+"your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful, but\n"
+"WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n"
+"General Public License, /usr/share/common-licenses/GPL, for more details.\n"
+msgstr ""
+"This program is free software; you can redistribute it and/or modify\n"
+"it under the terms of the GNU General Public License as published by\n"
+"the Free Software Foundation; either version 2 of the License, or (at\n"
+"your option) any later version.\n"
+"\n"
+"This program is distributed in the hope that it will be useful, but\n"
+"WITHOUT ANY WARRANTY; without even the implied warranty of\n"
+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n"
+"General Public License, /usr/share/common-licenses/GPL, for more details.\n"
+
+#: adduser:1554
+msgid ""
+"adduser [--uid id] [--firstuid id] [--lastuid id]\n"
+" [--gid id] [--firstgid id] [--lastgid id] [--ingroup group]\n"
+" [--add-extra-groups] [--shell shell]\n"
+" [--comment comment] [--home dir] [--no-create-home]\n"
+" [--allow-all-names] [--allow-bad-names]\n"
+" [--disabled-password] [--disabled-login]\n"
+" [--conf file] [--quiet] [--verbose] [--debug]\n"
+" user\n"
+" Add a regular user\n"
+"\n"
+"adduser --system\n"
+" [--uid id] [--group] [--ingroup group] [--gid id]\n"
+" [--shell shell] [--comment comment] [--home dir] [--no-create-home]\n"
+" [--conf file] [--quiet] [--verbose] [--debug]\n"
+" user\n"
+" Add a system user\n"
+"\n"
+"adduser --group\n"
+" [--gid ID] [--firstgid id] [--lastgid id]\n"
+" [--conf file] [--quiet] [--verbose] [--debug]\n"
+" group\n"
+"addgroup\n"
+" [--gid ID] [--firstgid id] [--lastgid id]\n"
+" [--conf file] [--quiet] [--verbose] [--debug]\n"
+" group\n"
+" Add a user group\n"
+"\n"
+"addgroup --system\n"
+" [--gid id]\n"
+" [--conf file] [--quiet] [--verbose] [--debug]\n"
+" group\n"
+" Add a system group\n"
+"\n"
+"adduser USER GROUP\n"
+" Add an existing user to an existing group\n"
+msgstr ""
+"adduser [--uid id] [--firstuid id] [--lastuid id]\n"
+" [--gid id] [--firstgid id] [--lastgid id] [--ingroup group]\n"
+" [--add-extra-groups] [--shell გარსი]\n"
+" [--comment კომენტარი] [--home სქღლდ] [--no-create-home]\n"
+" [--allow-all-names] [--allow-bad-names]\n"
+" [--disabled-password] [--disabled-login]\n"
+" [--conf ფაილი] [--quiet] [--verbose] [--debug]\n"
+" მომხმარებელი\n"
+" ჩვეულებრივი მომხმარებლის დამატება\n"
+"\n"
+"adduser --system\n"
+" [--uid id] [--group] [--ingroup ჯგუფი] [--gid id]\n"
+" [--shell გარსი] [--comment ჯგუფი] [--home სქღლდ] [--no-create-home]\n"
+" [--conf ფაილი] [--quiet] [--verbose] [--debug]\n"
+" მომხმარებელი\n"
+" სისტემური მომხმარებლის დამატება\n"
+"\n"
+"adduser --group\n"
+" [--gid ID] [--firstgid id] [--lastgid id]\n"
+" [--conf ფაილი] [--quiet] [--verbose] [--debug]\n"
+" ჯგუფი\n"
+"addgroup\n"
+" [--gid ID] [--firstgid id] [--lastgid id]\n"
+" [--conf ფაილი] [--quiet] [--verbose] [--debug]\n"
+" ჯგუფი\n"
+" მომხმარებლის ჯგუფის დამატება\n"
+"\n"
+"addgroup --system\n"
+" [--gid id]\n"
+" [--conf ფაილი] [--quiet] [--verbose] [--debug]\n"
+" ჯგუფი\n"
+" სისტემური ჯგუფის დამატება\n"
+"\n"
+"adduser მომხმარებელი ჯგუფი\n"
+" არსებული მომხმარებლის დამატება არსებულ ჯგუფში\n"
+
+#: deluser:170
+msgid "Only root may remove a user or group from the system."
+msgstr "სისტემიდან მომხმარებლის, ან ჯგუფის წაშლა, მხოლოდ, root-ს შეუძლია."
+
+#: deluser:271 deluser:290
+msgid ""
+"In order to use the --remove-home, --remove-all-files, and --backup "
+"features, you need to install the `perl' package. To accomplish that, run "
+"apt-get install perl."
+msgstr ""
+"იმისათვის, რომ გამოიყენოთ ფუნქციები --remove-home, --remove-all-files და --"
+"backup, უნდა დააყენოთ პაკეტი 'perl'. ამისთვის გაუშვით ბრძანება apt-get "
+"install perl."
+
+#: deluser:281
+#, perl-format
+msgid "The user `%s' is not a system user. Exiting."
+msgstr "მომხმარებელი '%s' სისტემური მომხმარებელი არაა. გასვლა."
+
+#: deluser:285
+#, perl-format
+msgid "The user `%s' does not exist, but --system was given. Exiting."
+msgstr ""
+"მომხმარებელი `%s' არ არსებობს, მაგრამ მითითებულია პარამეტრი --system. გასვლა."
+
+#: deluser:302
+msgid ""
+"WARNING: You are just about to delete the root account (uid 0). Usually this "
+"is never required as it may render the whole system unusable. If you really "
+"want this, call deluser with parameter --no-preserve-root. Stopping now "
+"without having performed any action."
+msgstr ""
+"გაფრთხილება: აპირებთ, წაშალოთ root-ის ანგარიში (uid 0). ჩვეულებრივ, ეს "
+"არასდროსაა საჭირო და ამან, შეიძლება, მთელი სისტემა არასტაბილური გახადოს. თუ "
+"ამის გაკეთება მაინც გნებავთ, deluser გამოიძახეთ პარამეტრით --no-preserve-"
+"root. ახლა კი გავჩერდები. სისტემაში ქმედება არ განხორციელებულა."
+
+#: deluser:314
+msgid "remove_home or remove_all_files beginning"
+msgstr "remove_home-ის, ან remove_all_files-ის დამუშავების დასაწყისი"
+
+#: deluser:315
+msgid "Looking for files to backup/remove ..."
+msgstr "ფაილების ძებნა დასამარქაფებლად/წასაშლელად..."
+
+#: deluser:320
+#, perl-format
+msgid "failed to open /proc/mounts: %s"
+msgstr "/proc/mounts-ის გახსნა ჩავარდა: %s"
+
+#: deluser:333
+#, perl-format
+msgid "failed to close /proc/mounts: %s"
+msgstr "/proc/mounts-ის დახურვა ჩავარდა: %s"
+
+#: deluser:363
+#, perl-format
+msgid "Not backing up/removing `%s', it is a mount point."
+msgstr "`%s'-ის მარქაფი/წაშლა არ მოხდება, რადგან ის მიმაგრების წერტილია."
+
+#: deluser:370
+#, perl-format
+msgid "Not backing up/removing `%s', it matches %s."
+msgstr "`%s'-ის მარქაფი/წაშლა არ მოხდება, რადგან ის %s-ს ემთხვევა."
+
+#: deluser:385
+#, perl-format
+msgid "Cannot handle special file %s"
+msgstr "სპეციალური ფაილის %s დამუშავება შეუძლებელია"
+
+#: deluser:394
+#, perl-format
+msgid "Backing up %d files to be removed to %s ..."
+msgstr "იქმნება %d ფაილის მარქაფი %s-ში წაშლამდე..."
+
+#: deluser:417
+msgid "Removing files ..."
+msgstr "ფაილების წაშლა ..."
+
+#: deluser:426
+msgid "Removing crontab ..."
+msgstr "Crontab -ის წაშლა ..."
+
+#: deluser:433 deluser:436
+#, perl-format
+msgid ""
+"`%s' is not executable. Skipping crontab removal. Package `cron' required."
+msgstr ""
+"'%s' შესრულებადი არაა. crontab-ის წაშლა გამოტოვებული იქნება. პაკეტი 'cron' "
+"აუცილებელია."
+
+#: deluser:466
+#, perl-format
+msgid "getgrnam `%s' failed: %s. This shouldn't happen."
+msgstr "getgrnam `%s' ჩავარდა: %s. ეს არ უნდა მომხდარიყო."
+
+#: deluser:472
+#, perl-format
+msgid "The group `%s' is not a system group. Exiting."
+msgstr "ჯგუფი '%s' სისტემური ჯგუფი არაა. გასვლა."
+
+#: deluser:476
+#, perl-format
+msgid "The group `%s' is not empty!"
+msgstr "ჯგუფი '%s' ცარიელი არაა!"
+
+#: deluser:495
+#, perl-format
+msgid "The user `%s' does not exist.\n"
+msgstr "მომხმარებელი '%s' არ არსებობს.\n"
+
+#: deluser:499
+#, perl-format
+msgid "The group `%s' does not exist.\n"
+msgstr "ჯგუფი \"%s\" არ არსებობს.\n"
+
+#: deluser:503
+msgid "You may not remove the user from their primary group."
+msgstr "მომხმარებელს მისი ძირითადი ჯგუფიდან ვერ წაშლით."
+
+#: deluser:521
+#, perl-format
+msgid "The user `%s' is not a member of group `%s'."
+msgstr "მომხმარებელი '%s' ჯგუფის '%s' წევრი არაა."
+
+#: deluser:525
+#, perl-format
+msgid "Removing user `%s' from group `%s' ..."
+msgstr "იშლება მომხმარებელი `%s' ჯგუფიდან `%s' ..."
+
+#: deluser:536
+#, perl-format
+msgid ""
+"deluser version %s\n"
+"\n"
+msgstr ""
+"deluser ვერსია %s\n"
+"\n"
+
+#: deluser:537
+msgid ""
+"Removes users and groups from the system.\n"
+"\n"
+"For detailed copyright information, please refer to\n"
+"/usr/share/doc/adduser/copyright.\n"
+"\n"
+msgstr ""
+"შლის მომხმარებლებს და ჯგუფებს სისტემიდან.\n"
+"\n"
+"საავტორო უფლებების შესახებ დეტალური ინფორმაციისთვის იხილეთ ბმული\n"
+"/usr/share/doc/adduser/copyright.\n"
+"\n"
+
+#: deluser:557
+msgid ""
+"deluser [--system] [--remove-home] [--remove-all-files] [--backup]\n"
+" [--backup-to dir] [--backup-suffix str] [--conf file]\n"
+" [--quiet] [--verbose] [--debug] user\n"
+"\n"
+" remove a regular user from the system\n"
+"\n"
+"deluser --group [--system] [--only-if-empty] [--conf file] [--quiet]\n"
+" [--verbose] [--debug] group\n"
+"delgroup [--system] [--only-if-empty] [--conf file] [--quiet]\n"
+" [--verbose] [--debug] group\n"
+" remove a group from the system\n"
+"\n"
+"deluser [--conf file] [--quiet] [--verbose] [--debug] user group\n"
+" remove the user from a group\n"
+msgstr ""
+"deluser [--system] [--remove-home] [--remove-all-files] [--backup]\n"
+" [--backup-to dir] [--backup-suffix str] [--conf ფაილი]\n"
+" [--quiet] [--verbose] [--debug] user\n"
+"\n"
+" ჩვეულებრივი მომხმარებლის წაშლა სისტემიდან\n"
+"\n"
+"deluser --group [--system] [--only-if-empty] [--conf ფაილი] [--quiet]\n"
+" [--verbose] [--debug] ჯგუფი\n"
+"delgroup [--system] [--only-if-empty] [--conf ფაილი] [--quiet]\n"
+" [--verbose] [--debug] ჯგუფი\n"
+" ჯგუფის წაშლა სისტემიდან\n"
+"\n"
+"deluser [--conf ფაილი] [--quiet] [--verbose] [--debug] მომხმარებელი ჯგუფი\n"
+" მომხმარებლის წაშლა ჯგუფიდან\n"
+
+#: deluser:603 deluser:613
+#, perl-format
+msgid "Backup suffix %s unavailable, using gzip."
+msgstr "მარქაფის სუფიქსი %s ხელმისაწვდომი არაა. გამოიყენება gzip."
+
+#: AdduserCommon.pm:192
+#, perl-format
+msgid "`%s' does not exist. Using defaults."
+msgstr "`%s' არ არსებობს. ვიყენებ ნაგულისხმევ მნიშვნელობებს."
+
+#: AdduserCommon.pm:198
+#, perl-format
+msgid "cannot open configuration file %s: `%s'\n"
+msgstr "ვერ გავხსენი კონფიგურაციის ფაილი %s: `%s'\n"
+
+#: AdduserCommon.pm:208 AdduserCommon.pm:280 AdduserCommon.pm:308
+#, perl-format
+msgid "Couldn't parse `%s', line %d."
+msgstr "ვერ დავამუშავე`%s', ხაზი %d."
+
+#: AdduserCommon.pm:213
+#, perl-format
+msgid "Unknown variable `%s' at `%s', line %d."
+msgstr "უცნობი ცვლადი `%s' `%s'-ში, ხაზი %d."
+
+#: AdduserCommon.pm:246
+#, perl-format
+msgid "Cannot read directory `%s'"
+msgstr "საქაღალდის '%s' წაკითხვის შეცდომა"
+
+#: AdduserCommon.pm:261
+#, perl-format
+msgid "`%s' does not exist."
+msgstr "`%s' არ არსებობს."
+
+#: AdduserCommon.pm:266
+#, perl-format
+msgid "Cannot open pool file %s: `%s'"
+msgstr "ვერ გავხსენი პულის ფაილი %s: `%s'"
+
+#: AdduserCommon.pm:321
+#, perl-format
+msgid "Illegal pool type `%s' reading `%s'."
+msgstr "დაუშვებელი პულის ტიპი `%s' ფაილიდან `%s'."
+
+#: AdduserCommon.pm:325
+#, perl-format
+msgid "Duplicate name `%s' at `%s', line %d."
+msgstr "დუბლირებული სახელი `%s' ფაილში `%s', ხაზი %d."
+
+#: AdduserCommon.pm:329
+#, perl-format
+msgid "Duplicate ID `%s' at `%s', line %d."
+msgstr "გამეორებული ID '%s' ფაილში '%s' ხაზზე %d."
+
+#: AdduserCommon.pm:367
+#, perl-format
+msgid ""
+"`%s' refused the given user name, but --allow-all-names is given. "
+"Continueing."
+msgstr ""
+"`%s'-მა უარი განაცხადა მიწოდებულ მომხმარებლის სახელზე, მაგრამ მითითებულია "
+"პარამეტრი --allow-all-names. ვაგრძელებ."
+
+#: AdduserCommon.pm:370
+#, perl-format
+msgid ""
+"`%s' refused the given user name. This is a bug in adduser. Please file a "
+"bug report."
+msgstr ""
+"`%s'-მა უარი განაცხადა მიწოდებულ მომხმარებლის სახელზე. ეს adduser-ის "
+"შეცდომაა. შეავსეთ ანგარიში შეცდომის შესახებ."
+
+#: AdduserCommon.pm:374 AdduserCommon.pm:388
+#, perl-format
+msgid "`%s' returned error code %d. Exiting."
+msgstr "`%s'-მა დააბრუნა შეცდომის კოდი %d. გასვლა."
+
+#: AdduserCommon.pm:378 AdduserCommon.pm:391
+#, perl-format
+msgid "`%s' exited from signal %d. Exiting."
+msgstr "`%s' გავიდა სიგნალისგან %d. გასვლა."
+
+#: AdduserCommon.pm:403
+#, perl-format
+msgid "`%s' failed to execute. %s. Continuing."
+msgstr "`%s'-ის გაშვება ჩავარდა. %s. ვაგრძელებ."
+
+#: AdduserCommon.pm:405
+#, perl-format
+msgid "`%s' killed by signal %d. Continuing."
+msgstr "`%s' მოკვდა სიგნალით %d. ვაგრძელებ."
+
+#: AdduserCommon.pm:407
+#, perl-format
+msgid "`%s' failed with status %d. Continuing."
+msgstr "`%s' ჩავარდა სტატუსით %d. ვაგრძელებ."
+
+#: AdduserCommon.pm:449
+#, perl-format
+msgid "Could not find program named `%s' in $PATH."
+msgstr "$PATH-ში პროგრამა სახელით '%s' აღმოჩენილი არაა."
+
+#: AdduserCommon.pm:526
+#, perl-format
+msgid "could not open lock file %s!"
+msgstr "გახსნის შეცდომა ბლოკის ფაილისთვის %s!"
+
+#: AdduserCommon.pm:532
+msgid "Could not obtain exclusive lock, please try again shortly!"
+msgstr "ექსკლუზიური ბლოკის მიღება შეუძლებელია. ცოტა ხანში სცადეთ!"
+
+#: AdduserCommon.pm:535
+msgid "Waiting for lock to become available..."
+msgstr "ბლოკის ხელმისაწვდომობის მოლოდინი..."
+
+#: AdduserCommon.pm:542
+#, perl-format
+msgid "could not seek - %s!"
+msgstr "გადახვევა შეუძლებელია - %s!"
+
+#: AdduserCommon.pm:551
+msgid "could not find lock file!"
+msgstr "ბლოკის ფაილის აღმოჩენა შეუძლებელია!"
+
+#: AdduserCommon.pm:556
+#, perl-format
+msgid "could not unlock file %s: %s"
+msgstr "განბლოკვა შეუძლებელია ფაილისთვის %s: %s"
+
+#: AdduserCommon.pm:561
+#, perl-format
+msgid "could not close lock file %s: %s"
+msgstr "ვერ დავხურე ბლოკის ფაილი %s: %s"
+
+#: AdduserLogging.pm:162
+#, perl-format
+msgid "logging to syslog failed: command line %s returned error: %s\n"
+msgstr "syslog-ში ჩაწერის შეცდომა: ბრძანებამ %s დააბრუნა შეცდომა: %s\n"
=====================================
testsuite/lib_test.pm
=====================================
@@ -16,12 +16,15 @@ preseed_config(\@deluserconf,\%del_config);
my $user_prefix = "addusertest";
-
+use constant {
+ SYS_MIN => 100,
+ SYS_MAX => 999,
+};
sub assert {
my ($cond) = @_;
if ($cond) {
- print "Test failed; aborting test suite\n";
+ print "Test failed\n";
exit 1;
}
}
@@ -46,7 +49,7 @@ sub find_unused_uid {
}
else {
print "Haven't found a unused uid in range ($low_uid - $high_uid)\nExiting ...\n";
- exit 1;
+ return 1;
}
}
@@ -90,7 +93,7 @@ sub find_unused_gid {
}
else {
print "Haven't found a unused gid in range ($low_gid - $high_gid)\nExiting ...\n";
- exit 1;
+ return 1;
}
}
@@ -102,12 +105,13 @@ sub check_user_exist {
my @ent = getpwnam ($username);
if (!@ent) {
print "user $username does not exist\n";
- exit 1;
+ return 1;
}
if (( defined($uid)) && ($ent[2] != $uid)) {
printf "uid $uid does not match %s\n",$ent[2];
return 1;
}
+ print "user $username exists\n";
return 0;
}
@@ -115,8 +119,10 @@ sub check_user_not_exist {
my ($username) = @_;
if (defined(getpwnam($username))) {
+ print "user $username exists\n";
return 1;
}
+ print "user $username does not exist\n";
return 0;
}
@@ -228,5 +234,94 @@ sub check_user_has_gid {
return 1;
}
+sub testsuite_existing_user_status {
+ my ($user_name,$user_uid) = @_;
+ my $ret = EXISTING_NOT_FOUND;
+
+ my (
+ $egpwn_name, $egpwn_passwd, $egpwn_uid, $egpwn_gid, $egpwn_quota,
+ $egpwn_comment, $egpwn_gcos, $egpwn_dir, $egpwn_shell, $egpwn_expire,
+ $egpwn_rest
+ ) = getpwnam($user_name);
+
+ if (defined $egpwn_uid) {
+ $ret |= EXISTING_FOUND;
+ $ret |= EXISTING_ID_MISMATCH if (defined($user_uid) && $egpwn_uid != $user_uid);
+ $ret |= EXISTING_SYSTEM if \
+ ($egpwn_uid >= SYS_MIN && $egpwn_uid <= SYS_MAX);
+
+ $ret |= EXISTING_NOLOGIN if ($egpwn_shell =~ /bin\/nologin/);
+ $ret |= EXISTING_HAS_PASSWORD if
+ (defined $egpwn_passwd && $egpwn_passwd ne '' && ($egpwn_passwd =~ s/^[!*]+//r ne ''));
+ $ret |= EXISTING_LOCKED if
+ (defined $egpwn_passwd && $egpwn_passwd =~ /^[!*]/);
+
+ # this is deliberately implemented differently from the actual program
+ my $age = `chage -l $user_name`;
+
+ if ($age =~ /Account expires\s*:\s*(.+)/i) {
+ my $exp = $1;
+ if ($exp ne 'never') {
+ chomp $exp;
+ # Convert to epoch using GNU date
+ # Convert to epoch using GNU date
+ my $expiry_epoch = `date -d "$exp" +%s 2>/dev/null`;
+ chomp $expiry_epoch;
+
+ if (defined $expiry_epoch && $expiry_epoch =~ /^\d+$/) {
+ $ret |= EXISTING_EXPIRED if ($expiry_epoch < time);
+ } else {
+ warn "Failed to parse expiry date '$exp' with date command\n";
+ }
+ }
+ }
+ } elsif ($user_uid && getpwuid($user_uid)) {
+ $ret |= EXISTING_ID_MISMATCH;
+ }
+ return $ret;
+}
+
+# Map human-readable status names to bitmask constants
+my %USER_STATUS_MASK = (
+ locked => EXISTING_LOCKED,
+ haspasswd => EXISTING_HAS_PASSWORD,
+ nologin => EXISTING_NOLOGIN,
+ expired => EXISTING_EXPIRED,
+);
+sub check_user_status {
+ my ($username, $check, $do_print) = @_;
+ $do_print //= 0;
+
+ my $invert = 0;
+ my $result;
+
+ # Check for negative prefix "not_"
+ if ($check =~ /^not_(.+)$/) {
+ $invert = 1;
+ $check = $1;
+ }
+
+ my $mask = $USER_STATUS_MASK{$check}
+ or die "Unknown user status '$check'";
+
+ my $status = testsuite_existing_user_status($username);
+ # returns 0 if status is as desired so that it can be used in assertion
+ $result = (($status & $mask) == $mask) ? 0 : 1;
+
+ if ($do_print) {
+ my $msg = $result
+ ? "User '$username' $check"
+ : "User '$username' NOT $check";
+ print "$msg";
+ }
+
+ $result = !$result if $invert;
+ print " (status $status, returning ", $result ? 1 : 0, ")\n";
+ return $result;
+}
+
+
return 1
+
+# vim: tabstop=4 shiftwidth=4 expandtab
=====================================
testsuite/runsuite.sh
=====================================
@@ -1,39 +1,63 @@
#!/bin/bash
+set -euo pipefail
-FAILED=""
+# Backup directory
+BACKUP_DIR="./etc_backup"
+mkdir -p "$BACKUP_DIR"
-PASSWD_BAK="./passwd.backup"
+FILES=(passwd shadow group gshadow)
+FAILED=()
-
-if [ "$(id -u)" != "0" ]; then
- echo "root needed"
+# Ensure root
+if [ "$(id -u)" -ne 0 ]; then
+ echo "root needed" >&2
exit 1
fi
-cp /etc/passwd $PASSWD_BAK
+# Backup critical files
+for f in "${FILES[@]}"; do
+ cp "/etc/$f" "$BACKUP_DIR/$f"
+done
+# Restore on exit
+cleanup() {
+ echo "Restoring original /etc files..."
+ for f in "${FILES[@]}"; do
+ cp "$BACKUP_DIR/$f" "/etc/$f"
+ done
+ rm -rf $BACKUP_DIR
+}
+trap cleanup EXIT
+
+# Determine tests to run
+if [ $# -ge 1 ]; then
+ TESTS=("$1")
+else
+ TESTS=(./test*.pl)
+fi
+
+# Run tests with shadowconfig set to "on" only
for a in on; do
- for i in ./test*.pl ; do
- if ! shadowconfig $a > /dev/null; then
- echo "shadowconfig $a failed"
- exit 1
- fi
+ if ! shadowconfig "$a" >/dev/null; then
+ echo "shadowconfig $a failed" >&2
+ exit 1
+ fi
+
+ for i in "${TESTS[@]}"; do
echo
echo "Starting $i (shadow $a)"
- /usr/bin/perl -I. $i
- if [ "$?" != "0" ]; then
- FAILED="$FAILED $i($a)"
+ if ! perl -I. "$i" < /dev/null; then
+ FAILED+=("$i($a)")
fi
done
done
-if [ -z "$FAILED" ]; then
+# Success/failure reporting
+if [ "${#FAILED[@]}" -eq 0 ]; then
echo "All tests passed successfully"
- rm $PASSWD_BAK
- exit 0
else
- echo "tests $FAILED failed"
- echo "see $PASSWD_BAK for a copy of /etc/passwd before starting"
+ echo "Tests failed: ${FAILED[*]}"
+ echo "Original /etc files were restored from $BACKUP_DIR"
exit 1
fi
=====================================
testsuite/test01.pl
=====================================
@@ -42,3 +42,4 @@ if (defined (getpwnam($username))) {
print "ok\n";
}
+# vim: tabstop=4 shiftwidth=4 expandtab
=====================================
testsuite/test02.pl
=====================================
@@ -127,9 +127,9 @@ if (defined (getpwnam($username))) {
if( $error == 56 ) {
`deluser $username`;
} else {
- print "failed\n deluser (file::find not present) returned an errorcode != 0/56 ($error)\n";
+ print "failed (expected)\n deluser (file::find not present) returned an errorcode != 0/56 ($error)\n";
}
- print "failed\n deluser (file::find not present) returned an errorcode != 0 ($error)\n";
+ print "failed (expected)\n deluser (file::find not present) returned an errorcode != 0 ($error)\n";
$error=0;
`rm -rf $homedir`;
}
=====================================
testsuite/test03.pl
=====================================
@@ -30,4 +30,5 @@ if (!defined (getpwnam($username))) {
assert(check_homedir_not_exist($homedir));
print "ok\n";
}
-
+
+# vim: tabstop=4 shiftwidth=4 expandtab
=====================================
testsuite/test04.pl
=====================================
@@ -30,4 +30,5 @@ if (!defined (getpwnam($username))) {
assert(check_user_in_group($username,$groupname));
print "ok\n";
}
-
+
+# vim: tabstop=4 shiftwidth=4 expandtab
=====================================
testsuite/test05.pl
=====================================
@@ -29,4 +29,5 @@ if (!defined (getpwnam($username))) {
assert(check_user_in_group($username,$groupname));
print "ok\n";
}
-
+
+# vim: tabstop=4 shiftwidth=4 expandtab
=====================================
testsuite/test06.pl
=====================================
@@ -28,4 +28,5 @@ if (!defined (getpwnam($username))) {
assert(check_user_has_gid($username,$want_gid));
print "ok\n";
}
-
+
+# vim: tabstop=4 shiftwidth=4 expandtab
=====================================
testsuite/test07.pl
=====================================
@@ -30,4 +30,5 @@ if (!defined (getpwnam($username))) {
assert(check_user_homedir_not_exist ($username));
print "ok\n";
}
-
+
+# vim: tabstop=4 shiftwidth=4 expandtab
=====================================
testsuite/test08.pl
=====================================
@@ -91,7 +91,7 @@ unless (!defined getgrnam($newgroup)) {
print "ok\n";
}
-my $newgroup = find_unused_name();
+$newgroup = find_unused_name();
$cmd = "adduser --group $newgroup";
unless (defined getgrnam($newgroup)) {
@@ -137,3 +137,5 @@ if (!defined (getpwnam($sysusername))) {
}
print "ok\n";
}
+
+# vim: tabstop=4 shiftwidth=4 expandtab
=====================================
testsuite/test09.pl
=====================================
@@ -121,3 +121,4 @@ if ($output !~ /^fatal: The group `addusertest\d+' already exists\.$/ ) {
}
print "ok\n";
+# vim: tabstop=4 shiftwidth=4 expandtab
=====================================
testsuite/test10.pl → testsuite/test11.pl
=====================================
View it on GitLab: https://salsa.debian.org/debian/adduser/-/compare/e03b10b9d0b3dd70bbb55bb9271ce498ddc220a1...d8b8b51509b797d0bbd544153c94cf13da1b9838
--
View it on GitLab: https://salsa.debian.org/debian/adduser/-/compare/e03b10b9d0b3dd70bbb55bb9271ce498ddc220a1...d8b8b51509b797d0bbd544153c94cf13da1b9838
You're receiving this email because of your account on salsa.debian.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/pkg-shadow-devel/attachments/20260115/d69a5e25/attachment-0001.htm>
More information about the Pkg-shadow-devel
mailing list