Compare commits

..

16 Commits

Author SHA1 Message Date
Serge Hallyn
0259f84583 release 4.15.0-rc2
Signed-off-by: Serge Hallyn <serge@hallyn.com>
2024-02-15 17:54:19 -06:00
NorwayFun
d72d99a810 Update Georgian translation 2024-02-14 15:20:14 -06:00
Alejandro Colomar
f22ca217cd lib/chkname.c: is_valid_user_name(): Avoid a cast
By using a temporary vairable, we can remove a cast.

Reviewed-by: Iker Pedrosa <ipedrosa@redhat.com>
Cc: Tobias Stoeckmann <tobias@stoeckmann.org>
Cc: Serge Hallyn <serge@hallyn.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
2024-02-13 16:13:05 -06:00
Alejandro Colomar
ad307ee42a lib/chkname.c: is_valid_user_name(): Remove unnecessary check
If (maxsize == -1), then ((size_t)maxsize == SIZE_MAX).  And no size can
ever be >= SIZE_MAX, so it will never return false if sysconf(3) reports
an unlimited user-name size via returning -1.  Well, to be pedantic,
that disallows a user-name siz of precisely SIZE_MAX bytes when
sysconf(3) returns -1.  However, that's probably a good thing; such a
long user name might trigger Undefined Behavior somewhere else, so be
cautious and disallow it.  I hope nobody will be using the entire
address space for a user name.

The commit that introduced that check missed that this code had always
supported unlimited user-name sizes since it was introduced by Iker in
3b7cc05387 ("lib: replace `USER_NAME_MAX_LENGTH` macro"), and
6be85b0baf ("lib/chkname.c: Use tmp variable to avoid a -Wsign-compare
warning") even clarified this in the commit message.

So, while the code in 6a1f45d932 ("lib/chkname.c: Support unlimited
user name lengths") wasn't bad per se, the commit message was incorrect.
What that patch did was adding code for handling EINVAL (or any other
errors that a future kernel might add).

To be more pedantically correct, that commit also allowed (under certain
circumstances, user names of SIZE_MAX bytes, but those were originally
allowed (by accident), and only became disallowed in 403a2e3771
("lib/chkname.c: Take NUL byte into account").  But again, let's
disallow those, just to be cautious.

Link: <https://github.com/shadow-maint/shadow/pull/935>
Link: <https://github.com/shadow-maint/shadow/pull/935#discussion_r1477429492>
See-also: 6be85b0baf ("lib/chkname.c: Use tmp variable to avoid a -Wsign-compare warning")
Fixes: 6a1f45d932 ("lib/chkname.c: Support unlimited user name lengths")
Reviewed-by: Iker Pedrosa <ipedrosa@redhat.com>
Cc: Tobias Stoeckmann <tobias@stoeckmann.org>
Cc: Serge Hallyn <serge@hallyn.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
2024-02-13 16:13:05 -06:00
Alejandro Colomar
15882a5f90 src/login.c: Fix off-by-one bugss
These functions expect a size, not a length.  Don't subtract 1 to the
size.

Link: <https://github.com/shadow-maint/shadow/pull/935>
Link: <https://github.com/shadow-maint/shadow/issues/920#issuecomment-1926002209>
Link: <https://github.com/shadow-maint/shadow/pull/757>
Link: <https://github.com/shadow-maint/shadow/issues/674>
See-also: 0656a90bfd0d ("src/login.c: Fix off-by-one buggs")
See-also: 403a2e3771 ("lib/chkname.c: Take NUL byte into account")
Fixes: 3b7cc05387 ("lib: replace `USER_NAME_MAX_LENGTH` macro")
Reviewed-by: Iker Pedrosa <ipedrosa@redhat.com>
Cc: Tobias Stoeckmann <tobias@stoeckmann.org>
Cc: Serge Hallyn <serge@hallyn.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
2024-02-13 16:13:05 -06:00
Alejandro Colomar
51cd6aec02 lib/: Don't say 'len' where 'size' is meant
Fixes: 45c6603cc8 ("[svn-upgrade] Integrating new upstream version, shadow (19990709)")
Fixes: 3b7cc05387 ("lib: replace `USER_NAME_MAX_LENGTH` macro")
Fixes: 6be85b0baf ("lib/chkname.c: Use tmp variable to avoid a -Wsign-compare warning")
See-also: 403a2e3771 ("lib/chkname.c: Take NUL byte into account")
See-also: 6a1f45d932 ("lib/chkname.c: Support unlimited user name lengths")
Fixes: 95ea61009d ("lib/chkname.c: Use precise comment")
Reviewed-by: Iker Pedrosa <ipedrosa@redhat.com>
Cc: Tobias Stoeckmann <tobias@stoeckmann.org>
Cc: Serge Hallyn <serge@hallyn.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
2024-02-13 16:13:05 -06:00
Alejandro Colomar
6551709e96 src/login.c: Fix off-by-one buggs
Before 3b7cc05387 ("lib: replace `USER_NAME_MAX_LENGTH` macro"), this
code did use a length.  It used a utmp(5) fixed-width buffer, so the
length matches the buffer size (there was no terminating NUL byte).
However, sysconf(_SC_LOGIN_NAME_MAX) returns a buffer size that accounts
for the terminating null byte; see sysconf(3).  Thus, the commit that
introduced the call to sysconf(3), should have taken that detail into
account.

403a2e3771 ("lib/chkname.c: Take NUL byte into account"), by Tobias,
caught that bug in <lib/chkname.c>, but missed that the same commit that
introduced that bug, introduced the same bug in two other places.
This fixes all remaining calls to sysconf(_SC_LOGIN_NAME_MAX).

I still observe some suspicious code after this fix:

	if (do_rlogin(hostname, username, max_size - 1, term, sizeof(term)))

	...

	login_prompt(username, max_size - 1);

We're passing size-1 to functions that want a size.  But since the fix
to those will be different, let's do that in the following commits.

Link: <https://github.com/shadow-maint/shadow/pull/935>
Link: <https://github.com/shadow-maint/shadow/issues/920#issuecomment-1926002209>
Link: <https://github.com/shadow-maint/shadow/pull/757>
Link: <https://github.com/shadow-maint/shadow/issues/674>
See-also: 403a2e3771 ("lib/chkname.c: Take NUL byte into account")
Fixes: 3b7cc05387 ("lib: replace `USER_NAME_MAX_LENGTH` macro")
Reviewed-by: Iker Pedrosa <ipedrosa@redhat.com>
Cc: Tobias Stoeckmann <tobias@stoeckmann.org>
Cc: Serge Hallyn <serge@hallyn.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
2024-02-13 16:13:05 -06:00
Tycho Andersen
714b6a53d5 usermod: refuse invalid uidmaps during --add-sub{u,g}ids
It is slightly confusing to allow adding these only to later refuse them.

Here is a (lightly tested :) patch to also refuse them when adding.

Signed-off-by: Tycho Andersen <tycho@tycho.pizza>
2024-02-13 16:06:23 -06:00
Alejandro Colomar
1175932c0c lib/strtoday.c: strtoday(): Fix calculation
Days officially roll over at 00:00 UTC, not at 12:00 UTC.  I see no
reason to add that half day.

Also, remove the comment.  It's likely to get stale.

So, get_date() gets the number of seconds since the Epoch.  I wonder how
that thing works, but I'll assume it's something similar to getdate(3)
+ mktime(3).  After that, we need to convert seconds since Epoch to days
since Epoch.  That should be a simple division, AFAICS, since Epoch is
"1970‐01‐01 00:00:00 +0000 (UTC)".  See mktime(3).

Fixes: 45c6603cc8 ("[svn-upgrade] Integrating new upstream version, shadow (19990709)")
Link: <https://github.com/shadow-maint/shadow/issues/939>
Reported-by: Michael Vetter <jubalh@iodoru.org>
Tested-by: Gus Kenion <https://github.com/kenion>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
2024-02-13 16:05:12 -06:00
Tobias Stoeckmann
674409e226 lib/: Saturate addition to avoid overflow
Very large values in /etc/shadow could lead to overflows.  Make sure
that these calculations are saturated at LONG_MAX.  Since entries are
based on days and not seconds since epoch, saturating won't hurt anyone.

Co-developed-by: Tobias Stoeckmann <tobias@stoeckmann.org>
Co-developed-by: Alejandro Colomar <alx@kernel.org>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
2024-02-13 16:02:49 -06:00
Tobias Stoeckmann
20100e4b22 src/chage.c: Unify long overflow checks in print_day_as_date()
The conversion from day to seconds can be done in print_date
(renamed to print_day_as_date for clarification).  This has the nice
benefit that DAY multiplication and long to time_t conversion are done
at just one place.

Co-developed-by: Tobias Stoeckmann <tobias@stoeckmann.org>
Co-developed-by: Alejandro Colomar <alx@kernel.org>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
2024-02-13 16:02:49 -06:00
Alejandro Colomar
7eb10e6298 etc/pam.d/Makefile.am: Fix typo
The commit we're fixing mentions that it wanted to move 'chpasswd', but
it removed 'ch_g_passwd' from 'pamd_acct_tools_files' and added
'chpasswd' to 'pamd_files'.  It seems it removed the wrong thing by
accident.

Fixes: 341d80c2c7 ("Makefile: move chpasswd and newusers to pamd target")
Link: <https://github.com/shadow-maint/shadow/pull/928#discussion_r1487687347>
Link: <https://github.com/shadow-maint/shadow/issues/926#issuecomment-1941324761>
Reported-by: Dominique Leuenberger <dleuenberger@suse.com>
Reported-by: Michael Vetter <jubalh@iodoru.org>
Cc: David Runge <dvzrv@archlinux.org>
Reviewed-by: Iker Pedrosa <ipedrosa@redhat.com>
Tested-by: Michael Vetter <jubalh@iodoru.org>
Reviewed-by: Michael Vetter <jubalh@iodoru.org>
Reviewed-by: loqs <https://github.com/loqs>
Co-developed-by: Dominique Leuenberger <dleuenberger@suse.com>
Signed-off-by: Dominique Leuenberger <dleuenberger@suse.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
2024-02-13 18:45:04 +01:00
Alejandro Colomar
3e59e9613e AUTHORS.md: Format list
Reviewed-by: Iker Pedrosa <ipedrosa@redhat.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
2024-02-06 16:16:32 +01:00
Tobias Stoeckmann
95ea61009d lib/chkname.c: Use precise comment
Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
2024-02-04 17:03:12 -06:00
Tobias Stoeckmann
6a1f45d932 lib/chkname.c: Support unlimited user name lengths
If the system does not have a user name length limit, support it
accordingly. If the system has no _SC_LOGIN_NAME_MAX, use
LOGIN_NAME_MAX constant instead.

Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
2024-02-04 17:03:12 -06:00
Tobias Stoeckmann
403a2e3771 lib/chkname.c: Take NUL byte into account
The _SC_LOGIN_NAME_MAX value includes space for the NUL byte. The length
of name must smaller than this value to be valid.

Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
2024-02-04 17:03:12 -06:00
14 changed files with 518 additions and 369 deletions

View File

@@ -13,10 +13,10 @@ a lot of mail...
To verify signatures on releases, use the following keys under keys/ :
Serge Hallyn: keys/66D0387DB85D320F8408166DB175CFA98F192AF2.asc
Christian Brauner: keys/4880B8C9BD0E5106FC070F4F7B3C391EFEA93624.asc
Iker Pedrosa: keys/4E80EF49C7987B6DE2F81F5005079C6C3A653E57.asc
Alejandro Colomar: keys/A9348594CE31283A826FBDD8D57633D441E25BB5.asc
* Serge Hallyn: keys/66D0387DB85D320F8408166DB175CFA98F192AF2.asc
* Christian Brauner: keys/4880B8C9BD0E5106FC070F4F7B3C391EFEA93624.asc
* Iker Pedrosa: keys/4E80EF49C7987B6DE2F81F5005079C6C3A653E57.asc
* Alejandro Colomar: keys/A9348594CE31283A826FBDD8D57633D441E25BB5.asc
# Authors and contributors
* Adam Rudnicki <adam@v-lo.krakow.pl>

View File

@@ -4,7 +4,7 @@ m4_define([libsubid_abi_major], 4)
m4_define([libsubid_abi_minor], 0)
m4_define([libsubid_abi_micro], 0)
m4_define([libsubid_abi], [libsubid_abi_major.libsubid_abi_minor.libsubid_abi_micro])
AC_INIT([shadow], [4.15.0-rc1], [pkg-shadow-devel@lists.alioth.debian.org], [],
AC_INIT([shadow], [4.15.0-rc2], [pkg-shadow-devel@lists.alioth.debian.org], [],
[https://github.com/shadow-maint/shadow])
AM_INIT_AUTOMAKE([1.11 foreign dist-xz subdir-objects])
AC_CONFIG_MACRO_DIRS([m4])

View File

@@ -12,7 +12,7 @@ pamd_files = \
pamd_acct_tools_files = \
chage \
chpasswd \
chgpasswd \
groupadd \
groupdel \
groupmod \

View File

@@ -13,12 +13,15 @@
#include <stdio.h>
#include <time.h>
#include <errno.h>
#include "prototypes.h"
#include "defines.h"
#include "exitcodes.h"
#include <pwd.h>
#include <grp.h>
#include "adds.h"
#include "defines.h"
#include "exitcodes.h"
#include "prototypes.h"
#ident "$Id$"
#ifndef PASSWD_PROGRAM
@@ -162,7 +165,8 @@ void agecheck (/*@null@*/const struct spwd *sp)
return;
}
remain = sp->sp_lstchg + sp->sp_max - now;
remain = addsl(sp->sp_lstchg, sp->sp_max, -now);
if (remain <= sp->sp_warn) {
if (remain > 1) {
(void) printf (_("Your password will expire in %ld days.\n"),

View File

@@ -1,11 +1,9 @@
/*
* SPDX-FileCopyrightText: 1990 - 1994, Julianne Frances Haugh
* SPDX-FileCopyrightText: 1996 - 2000, Marek Michałkiewicz
* SPDX-FileCopyrightText: 2001 - 2005, Tomasz Kłoczko
* SPDX-FileCopyrightText: 2005 - 2008, Nicolas François
*
* SPDX-License-Identifier: BSD-3-Clause
*/
// SPDX-FileCopyrightText: 1990-1994, Julianne Frances Haugh
// SPDX-FileCopyrightText: 1996-2000, Marek Michałkiewicz
// SPDX-FileCopyrightText: 2001-2005, Tomasz Kłoczko
// SPDX-FileCopyrightText: 2005-2008, Nicolas François
// SPDX-FileCopyrightText: 2023-2024, Alejandro Colomar <alx@kernel.org>
// SPDX-License-Identifier: BSD-3-Clause
/*
* is_valid_user_name(), is_valid_group_name() - check the new user/group
@@ -20,6 +18,8 @@
#ident "$Id$"
#include <ctype.h>
#include <errno.h>
#include <limits.h>
#include "defines.h"
#include "chkname.h"
@@ -72,20 +72,28 @@ static bool is_valid_name (const char *name)
return !numeric;
}
bool is_valid_user_name (const char *name)
{
size_t maxlen;
/*
* User names length are limited by the kernel
*/
maxlen = sysconf(_SC_LOGIN_NAME_MAX);
if (strlen(name) > maxlen)
bool
is_valid_user_name(const char *name)
{
long conf;
size_t maxsize;
errno = 0;
conf = sysconf(_SC_LOGIN_NAME_MAX);
if (conf == -1 && errno != 0)
maxsize = LOGIN_NAME_MAX;
else
maxsize = conf;
if (strlen(name) >= maxsize)
return false;
return is_valid_name (name);
return is_valid_name(name);
}
bool is_valid_group_name (const char *name)
{
/*
@@ -99,4 +107,3 @@ bool is_valid_group_name (const char *name)
return is_valid_name (name);
}

View File

@@ -15,11 +15,13 @@
#include <config.h>
#include <sys/types.h>
#include "prototypes.h"
#include "defines.h"
#include <pwd.h>
#include <time.h>
#include "adds.h"
#include "defines.h"
#include "prototypes.h"
#ident "$Id$"
@@ -38,7 +40,7 @@
*/
int isexpired (const struct passwd *pw, /*@null@*/const struct spwd *sp)
{
long now;
long now;
now = time(NULL) / DAY;
@@ -72,7 +74,8 @@ int isexpired (const struct passwd *pw, /*@null@*/const struct spwd *sp)
if ( (sp->sp_lstchg > 0)
&& (sp->sp_max >= 0)
&& (sp->sp_inact >= 0)
&& (now >= (sp->sp_lstchg + sp->sp_max + sp->sp_inact))) {
&& (now >= addsl(sp->sp_lstchg, sp->sp_max, sp->sp_inact)))
{
return 2;
}
@@ -94,9 +97,9 @@ int isexpired (const struct passwd *pw, /*@null@*/const struct spwd *sp)
* the password has expired.
*/
if (now >= (sp->sp_lstchg + sp->sp_max)) {
if (now >= addsl(sp->sp_lstchg, sp->sp_max))
return 1;
}
return 0;
}

View File

@@ -365,8 +365,8 @@ unsigned long csrand_interval (unsigned long min, unsigned long max);
extern int remove_tree (const char *root, bool remove_root);
/* rlogin.c */
extern int do_rlogin (const char *remote_host, char *name, size_t namelen,
char *term, size_t termlen);
extern int do_rlogin(const char *remote_host, char *name, size_t namesize,
char *term, size_t termsize);
/* root_flag.c */
extern void process_root_flag (const char* short_opt, int argc, char **argv);

View File

@@ -41,7 +41,9 @@ static struct {
{ -1, -1}
};
static void get_remote_string (char *buf, size_t size)
static void
get_remote_string(char *buf, size_t size)
{
for (;;) {
if (read (0, buf, 1) != 1) {
@@ -55,11 +57,13 @@ static void get_remote_string (char *buf, size_t size)
++buf;
}
}
/*NOTREACHED*/}
/*NOTREACHED*/
}
int
do_rlogin (const char *remote_host, char *name, size_t namelen, char *term,
size_t termlen)
do_rlogin(const char *remote_host, char *name, size_t namesize, char *term,
size_t termsize)
{
struct passwd *pwd;
char remote_name[32];
@@ -69,9 +73,9 @@ do_rlogin (const char *remote_host, char *name, size_t namelen, char *term,
int i;
TERMIO termio;
get_remote_string (remote_name, sizeof remote_name);
get_remote_string (name, namelen);
get_remote_string (term, termlen);
get_remote_string(remote_name, sizeof(remote_name));
get_remote_string(name, namesize);
get_remote_string(term, termsize);
cp = strchr (term, '/');
if (NULL != cp) {
@@ -126,4 +130,3 @@ do_rlogin (const char *remote_host, char *name, size_t namelen, char *term,
#endif
}
#endif /* RLOGIN */

View File

@@ -68,10 +68,9 @@ long strtoday (const char *str)
return retdate;
}
t = get_date (str, NULL);
t = get_date(str, NULL);
if ((time_t) - 1 == t) {
return -2;
}
/* convert seconds to days since 1970-01-01 */
return (t + DAY / 2) / DAY;
return t / DAY;
}

689
po/ka.po
View File

@@ -1,14 +1,14 @@
# Shadow-utils translation to Georgian.
# Copyright (C) YEAR Free Software Foundation, Inc.
# Copyright (C) 2024 Free Software Foundation, Inc.
# This file is distributed under the same license as the shadow-utils package.
# Temuri Doghonadze <temuri.doghonadze@gmail.com>, 2022.
# Temuri Doghonadze <temuri.doghonadze@gmail.com>, 2022-2024.
#
msgid ""
msgstr ""
"Project-Id-Version: shadow-utils\n"
"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
"POT-Creation-Date: 2022-07-27 22:49+0800\n"
"PO-Revision-Date: 2022-08-22 02:33+0200\n"
"POT-Creation-Date: 2024-02-08 05:49+0100\n"
"PO-Revision-Date: 2024-02-08 06:13+0100\n"
"Last-Translator: Temuri Doghonadze <temuri.doghonadze@gmail.com>\n"
"Language-Team: Georgian <(nothing)>\n"
"Language: ka\n"
@@ -16,226 +16,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 3.1.1\n"
#, c-format
msgid ""
"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
msgstr "%s ბევრჯერაა ნახსენები %s-ში. ჩაასწორეთ pwck-ით ან grpck-ით.\n"
#, c-format
msgid "crypt method not supported by libcrypt? (%s)\n"
msgstr "crypt-ის მეთოდი არაა მხარდაჭერილი libcrypt-ის მიერ? (%s)\n"
#, c-format
msgid "configuration error - cannot parse %s value: '%s'"
msgstr ""
"კონფიგურაციის შეცდომა - %s-ის მნიშვნელობის დამუშავება შეუძლებელია: '%s'"
msgid "Could not allocate space for config info.\n"
msgstr "კონფიგურაციის ინფორმაციისთვის სივრცის გამოყოფა შეუძლებელია.\n"
#, c-format
msgid "configuration error - unknown item '%s' (notify administrator)\n"
msgstr ""
"კონფიგურაციის შეცდომა - უცნობი ჩანაწერი '%s' (შეატყობინეთ ადმინისტრატორს)\n"
#, c-format
msgid "%s: nscd did not terminate normally (signal %d)\n"
msgstr "%s: nscd ნორმალურად არ დასრულებულა (სიგნალი %d)\n"
#, c-format
msgid "%s: nscd exited with status %d\n"
msgstr "%s: nscd გამოვიდა სტატუსით %d\n"
msgid "Password: "
msgstr "პაროლი: "
#, c-format
msgid "%s's Password: "
msgstr "%s-ის პაროლი: "
msgid "Cannot open audit interface.\n"
msgstr "აუდიტის ინტერფეისის გახსნის შეცდომა.\n"
#, c-format
msgid "%s: can not get previous SELinux process context: %s\n"
msgstr "%s: SELinux-ის პროცესის წინა კონტექსტის მიღების შეცდომა: %s\n"
#, c-format
msgid "[libsemanage]: %s\n"
msgstr "[libsemanage]: %s\n"
#, c-format
msgid "Cannot create SELinux management handle\n"
msgstr "SELinux-ის მართვის დამმუშავებლის შექმნა შეუძლებელია\n"
#, c-format
msgid "SELinux policy not managed\n"
msgstr "SELinux-ის პოლიტიკა მართული არაა\n"
#, c-format
msgid "Cannot read SELinux policy store\n"
msgstr "SELinux-ის პოლიტიკის საცავის წაკითხვა შეუძლებელია\n"
#, c-format
msgid "Cannot establish SELinux management connection\n"
msgstr "SELinux-ის მართვის შეერთების შექმნა შეუძლებელია\n"
#, c-format
msgid "Cannot begin SELinux transaction\n"
msgstr "SELinux-ის ტრანზაქციის დაწყების შეცდომა\n"
#, c-format
msgid "Could not query seuser for %s\n"
msgstr "%s-ის გამოთხოვა seuser-დან შეუძლებელია\n"
#, c-format
msgid "Could not set serange for %s\n"
msgstr "%s-სთვის serange-ის დაყენება შეუძლებელია\n"
#, c-format
msgid "Could not set sename for %s\n"
msgstr "%s-სთვის sename-ის დაყენება შეუძლებელია\n"
#, c-format
msgid "Could not modify login mapping for %s\n"
msgstr "მომხმარებლის სახელის ბმების ჩასწორება %s-სთვის შეუძლებელია\n"
#, c-format
msgid "Cannot create SELinux login mapping for %s\n"
msgstr "%s-ზე SELinux-ის მომხმარებლის სახელის ბმის შექმნა შეუძლებელია\n"
#, c-format
msgid "Could not set name for %s\n"
msgstr "%s-სთვის სახელის დაყენების შეცდომა\n"
#, c-format
msgid "Could not set SELinux user for %s\n"
msgstr "%s-სთვის SELinux-ის მომხმარებლის დაყენების შეცდომა\n"
#, c-format
msgid "Could not add login mapping for %s\n"
msgstr "%s-სთვის მომხმარებლის სახელის ბმის შექმნის შეცდომა\n"
#, c-format
msgid "Cannot init SELinux management\n"
msgstr "SELinux-ის მართვის ინიციალიზაციის შეცდომა\n"
#, c-format
msgid "Cannot create SELinux user key\n"
msgstr "SELinux-ის მომხმარებლის გასაღების შექმნის შეცდომა\n"
#, c-format
msgid "Cannot verify the SELinux user\n"
msgstr "SELinux-ის მომხმარებლის შემოწმების შეცდომა\n"
#, c-format
msgid "Cannot modify SELinux user mapping\n"
msgstr "SELinux-ის მოხმარებლების ბმების შეცვლს შეცდომა\n"
#, c-format
msgid "Cannot add SELinux user mapping\n"
msgstr "SELinux-ის მომხმარებლის ბმის დამატების შეცდომა\n"
#, c-format
msgid "Cannot commit SELinux transaction\n"
msgstr "SELinux-ის ტრანზაქციის გადაცემის შეცდომა\n"
#, c-format
msgid "Login mapping for %s is not defined, OK if default mapping was used\n"
msgstr ""
"მომხმარებლის სახელის ბმა %s-თვის განსაზღვრული არაა. OK, თუ ნაგულისხმები ბმა "
"იქნა გამოყენებული\n"
#, c-format
msgid "Login mapping for %s is defined in policy, cannot be deleted\n"
msgstr "მომხმარებლის სახელი %s პოლიტიკაშია გაწერილი. მისი წაშლა შეუძლებელია\n"
#, c-format
msgid "Could not delete login mapping for %s"
msgstr "მომხმარებლის სახელის ბმის წაშლა %s-სთვის შეუძლებელია"
#, c-format
msgid "%s: out of memory\n"
msgstr "%s: არასაკმარისი მეხსიერება\n"
#, c-format
msgid "%s: Cannot stat %s: %s\n"
msgstr "%s: %s-ის აღმოჩენის შეცდომა: %s\n"
#, c-format
msgid "%s: %s is neither a directory, nor a symlink.\n"
msgstr "%s: %s არც საქაღალდეა, არც სიმბმული.\n"
#, c-format
msgid "%s: Cannot read symbolic link %s: %s\n"
msgstr "%s: სიმბმულის წაკითხვის შეცდომა %s: %s\n"
#, c-format
msgid "%s: Suspiciously long symlink: %s\n"
msgstr "%s: საეჭვოდ გრძელი სიმბმული %s\n"
#, c-format
msgid "%s: Cannot create directory %s: %s\n"
msgstr "%s საქაღალდის (%s) შექმნის შეცდომა: %s\n"
#, c-format
msgid "%s: Cannot change owner of %s: %s\n"
msgstr "%s: %s-ის მფლობელის შეცვლის შეცდომა: %s\n"
#, c-format
msgid "%s: Cannot change mode of %s: %s\n"
msgstr "%s: %s-ის რეჟიმის შეცვლის შეცდომა: %s\n"
#, c-format
msgid "%s: unlink: %s: %s\n"
msgstr "%s: წაშლა: %s: %s\n"
#, c-format
msgid "%s: Cannot remove directory %s: %s\n"
msgstr "%s: საქაღალდის (%s) წაშლის შეცდომა: %s\n"
#, c-format
msgid "%s: Cannot rename %s to %s: %s\n"
msgstr "%s: %s-ის სახელის %s-მდე გადარქმევა შეუძლებელია: %s\n"
#, c-format
msgid "%s: Cannot remove %s: %s\n"
msgstr "%s: %s-ის წაშლა შეუძლებელია: %s\n"
#, c-format
msgid "%s: Cannot create symbolic link %s: %s\n"
msgstr "%s: სიმბმულის (%s) შექმნის შეცდომა: %s\n"
#, c-format
msgid "%s: Cannot change owners of %s: %s\n"
msgstr "%s: %s-ის მფლობელების შეცვლის შეცდომა: %s\n"
#, c-format
msgid "%s: Cannot lstat %s: %s\n"
msgstr "%s: %s-ის lstat-ის შეცდომა: %s\n"
#, c-format
msgid "%s: Warning, user %s has no tcb shadow file.\n"
msgstr "%s: გაფრთხილება: მომხმარებელს (%s) tcb shadow ფაილი არ გააჩნია.\n"
#, c-format
msgid ""
"%s: Emergency: %s's tcb shadow is not a regular file with st_nlink=1.\n"
"The account is left locked.\n"
msgstr ""
"%s: გადაუდებელი შემთხვევა: %s tcb ჩრდილი არ არის რეგულარული ფაილი st_nlink=1-"
"ით.\n"
"ანგარიში ჩაკეტილია.\n"
#, c-format
msgid "%s: mkdir: %s: %s\n"
msgstr "%s: mkdir: %s: %s\n"
#, c-format
msgid "%s: Cannot open %s: %s\n"
msgstr "%s: %s-ის გახსნის შეცდომა: %s\n"
"X-Generator: Poedit 3.3.2\n"
#, c-format
msgid "Warning: unknown group %s\n"
@@ -283,6 +64,11 @@ msgstr "TTY-იდან stdin-ის მფლობელისა და რ
msgid "%s: failed to unlock %s\n"
msgstr "%s: %s-ის განბლოკვის შეცდომა\n"
#, c-format
msgid ""
"Multiple entries named '%s' in %s. Please fix this with pwck or grpck.\n"
msgstr "%s ბევრჯერაა ნახსენები %s-ში. ჩაასწორეთ pwck-ით ან grpck-ით.\n"
#, c-format
msgid "%s: "
msgstr "%s: "
@@ -290,6 +76,10 @@ msgstr "%s: "
msgid ": "
msgstr ": "
#, c-format
msgid "crypt method not supported by libcrypt? (%s)\n"
msgstr "crypt-ის მეთოდი არაა მხარდაჭერილი libcrypt-ის მიერ? (%s)\n"
msgid "Environment overflow\n"
msgstr "გარემო გადავსებულია\n"
@@ -405,6 +195,19 @@ msgstr ""
msgid "%s: Can't get unique UID (no more available UIDs)\n"
msgstr "%s: უნიკალური UID-ის მიღების შეცდომა (ხელმისაწვდომი UID-ების გარეშე)\n"
#, c-format
msgid "configuration error - cannot parse %s value: '%s'"
msgstr ""
"კონფიგურაციის შეცდომა - %s-ის მნიშვნელობის დამუშავება შეუძლებელია: '%s'"
msgid "Could not allocate space for config info.\n"
msgstr "კონფიგურაციის ინფორმაციისთვის სივრცის გამოყოფა შეუძლებელია.\n"
#, c-format
msgid "configuration error - unknown item '%s' (notify administrator)\n"
msgstr ""
"კონფიგურაციის შეცდომა - უცნობი ჩანაწერი '%s' (შეატყობინეთ ადმინისტრატორს)\n"
#, c-format
msgid "%s: Not enough arguments to form %u mappings\n"
msgstr "%s: არასაკმარისი არგუმენტები %u ბმის ჩამოსაყალიბებლად\n"
@@ -434,8 +237,9 @@ msgid "%s: Could not set caps\n"
msgstr "%s: caps-ების დაყენების შედომა\n"
#, c-format
msgid "%s: snprintf failed!\n"
msgstr "%s: snprintf -ის შეცდომა!\n"
#| msgid "%s: snprintf failed!\n"
msgid "%s: stpeprintf failed!\n"
msgstr "%s: stpeprintf ჩავარდა!\n"
#, c-format
msgid "%s: open of %s failed: %s\n"
@@ -445,9 +249,21 @@ msgstr "%s: %s -ის გახსნის შეცდომა: %s\n"
msgid "%s: write to %s failed: %s\n"
msgstr "%s: %s-ში ჩაწერის შეცდომა: %s\n"
#, c-format
msgid "%s: closing %s failed: %s\n"
msgstr "%s: %s-ის დახურვა ჩავარდა: %s\n"
msgid "Too many logins.\n"
msgstr "მეტისმეტად ბევრი შესვლა.\n"
#, c-format
msgid ""
"\n"
"%s login: "
msgstr ""
"\n"
"%s მომხმარებლის სახელი: "
msgid "You have new mail."
msgstr "თქვენთვის წერილია."
@@ -457,6 +273,14 @@ msgstr "ახალი ელფოსტის გარეშე."
msgid "You have mail."
msgstr "თქვენ გაქვთ ფოსტა."
#, c-format
msgid "%s: nscd did not terminate normally (signal %d)\n"
msgstr "%s: nscd ნორმალურად არ დასრულებულა (სიგნალი %d)\n"
#, c-format
msgid "%s: nscd exited with status %d\n"
msgstr "%s: nscd გამოვიდა სტატუსით %d\n"
msgid "no change"
msgstr "ცვლილებების გარეშე"
@@ -469,9 +293,6 @@ msgstr "მხოლოდ სიმბოლოების ზომა"
msgid "too similar"
msgstr "ძალიან ჰგავს"
msgid "too simple"
msgstr "ძალიან მარტივია"
msgid "rotated"
msgstr "შემობრუნებული"
@@ -517,6 +338,13 @@ msgstr ""
"%s: (მომხმარებელი %s) pam_chauthtok() -ის შეცდომა:\n"
"%s\n"
msgid "Password: "
msgstr "პაროლი: "
#, c-format
msgid "%s's Password: "
msgstr "%s-ის პაროლი: "
#, c-format
msgid "Incorrect password for %s.\n"
msgstr "არასწორი პაროლი %s-სთვის.\n"
@@ -542,17 +370,13 @@ msgstr ""
msgid "%s: cannot access chroot directory %s: %s\n"
msgstr "%s: chroot საქაღალდის (%s) წვდომის შეცდომა: %s\n"
#, c-format
msgid "%s: cannot chdir to chroot directory %s: %s\n"
msgstr "%s: chroot საქაღალდეზე (%s) chdir-ის შეცდომა: %s\n"
#, c-format
msgid "%s: unable to chroot to directory %s: %s\n"
msgstr "%s: საქაღალდეზე (%s) chroot-ი შეუძლებელია: %s\n"
#, c-format
msgid "Unable to obtain random bytes.\n"
msgstr "შემთხვევითი ბაიტების მიღების შეცდომა.\n"
msgid "%s: cannot chdir in chroot directory %s: %s\n"
msgstr "%s: chroot საქაღალდეში (%s) chdir-ის შეცდომა: %s\n"
#, c-format
msgid ""
@@ -572,6 +396,107 @@ msgstr ""
"პარამეტრები ENCRYPT_METHOD-ში და შესაბამის კონფიგურაციაში თქვენს მიერ "
"არჩეული ჰეშის მეთოდისთვის.\n"
msgid "Cannot open audit interface.\n"
msgstr "აუდიტის ინტერფეისის გახსნის შეცდომა.\n"
#, c-format
msgid "%s: can not get previous SELinux process context: %s\n"
msgstr "%s: SELinux-ის პროცესის წინა კონტექსტის მიღების შეცდომა: %s\n"
#, c-format
msgid "[libsemanage]: %s\n"
msgstr "[libsemanage]: %s\n"
#, c-format
msgid "Cannot create SELinux management handle\n"
msgstr "SELinux-ის მართვის დამმუშავებლის შექმნა შეუძლებელია\n"
#, c-format
msgid "SELinux policy not managed\n"
msgstr "SELinux-ის პოლიტიკა მართული არაა\n"
#, c-format
msgid "Cannot read SELinux policy store\n"
msgstr "SELinux-ის პოლიტიკის საცავის წაკითხვა შეუძლებელია\n"
#, c-format
msgid "Cannot establish SELinux management connection\n"
msgstr "SELinux-ის მართვის შეერთების შექმნა შეუძლებელია\n"
#, c-format
msgid "Cannot begin SELinux transaction\n"
msgstr "SELinux-ის ტრანზაქციის დაწყების შეცდომა\n"
#, c-format
msgid "Could not query seuser for %s\n"
msgstr "%s-ის გამოთხოვა seuser-დან შეუძლებელია\n"
#, c-format
msgid "Could not set serange for %s to %s\n"
msgstr "%s-სთვის serange-ის %s-ზე დაყენება შეუძლებელია\n"
#, c-format
msgid "Could not set sename for %s\n"
msgstr "%s-სთვის sename-ის დაყენება შეუძლებელია\n"
#, c-format
msgid "Could not modify login mapping for %s\n"
msgstr "მომხმარებლის სახელის ბმების ჩასწორება %s-სთვის შეუძლებელია\n"
#, c-format
msgid "Cannot create SELinux login mapping for %s\n"
msgstr "%s-ზე SELinux-ის მომხმარებლის სახელის ბმის შექმნა შეუძლებელია\n"
#, c-format
msgid "Could not set name for %s\n"
msgstr "%s-სთვის სახელის დაყენების შეცდომა\n"
#, c-format
msgid "Could not set SELinux user for %s\n"
msgstr "%s-სთვის SELinux-ის მომხმარებლის დაყენების შეცდომა\n"
#, c-format
msgid "Could not add login mapping for %s\n"
msgstr "%s-სთვის მომხმარებლის სახელის ბმის შექმნის შეცდომა\n"
#, c-format
msgid "Cannot init SELinux management\n"
msgstr "SELinux-ის მართვის ინიციალიზაციის შეცდომა\n"
#, c-format
msgid "Cannot create SELinux user key\n"
msgstr "SELinux-ის მომხმარებლის გასაღების შექმნის შეცდომა\n"
#, c-format
msgid "Cannot verify the SELinux user\n"
msgstr "SELinux-ის მომხმარებლის შემოწმების შეცდომა\n"
#, c-format
msgid "Cannot modify SELinux user mapping\n"
msgstr "SELinux-ის მოხმარებლების ბმების შეცვლს შეცდომა\n"
#, c-format
msgid "Cannot add SELinux user mapping\n"
msgstr "SELinux-ის მომხმარებლის ბმის დამატების შეცდომა\n"
#, c-format
msgid "Cannot commit SELinux transaction\n"
msgstr "SELinux-ის ტრანზაქციის გადაცემის შეცდომა\n"
#, c-format
msgid "Login mapping for %s is not defined, OK if default mapping was used\n"
msgstr ""
"მომხმარებლის სახელის ბმა %s-თვის განსაზღვრული არაა. OK, თუ ნაგულისხმები ბმა "
"იქნა გამოყენებული\n"
#, c-format
msgid "Login mapping for %s is defined in policy, cannot be deleted\n"
msgstr "მომხმარებლის სახელი %s პოლიტიკაშია გაწერილი. მისი წაშლა შეუძლებელია\n"
#, c-format
msgid "Could not delete login mapping for %s"
msgstr "მომხმარებლის სახელის ბმის წაშლა %s-სთვის შეუძლებელია"
#, c-format
msgid "Unable to cd to '%s'\n"
msgstr "საქაღალდის %s-ზე შეცვლა შეუძლებელია\n"
@@ -583,6 +508,10 @@ msgstr "საქაღალდე არ არსებობს. შევ
msgid "Cannot execute %s"
msgstr "%s-ის შესრულების შეცდომა"
#, c-format
msgid "Maximum subsystem depth reached\n"
msgstr "მიღწეულია ქვესისტემის მაქსიმალური სიღრმე\n"
#, c-format
msgid "Invalid root directory '%s'\n"
msgstr "%s არასწორი root საქაღალდეა\n"
@@ -591,6 +520,87 @@ msgstr "%s არასწორი root საქაღალდეა\n"
msgid "Can't change root directory to '%s'\n"
msgstr "Root საქაღალდის %s-ზე შეცვლა შეუძლებელია\n"
#, c-format
msgid "%s: out of memory\n"
msgstr "%s: არასაკმარისი მეხსიერება\n"
#, c-format
msgid "%s: Cannot stat %s: %s\n"
msgstr "%s: %s-ის აღმოჩენის შეცდომა: %s\n"
#, c-format
msgid "%s: %s is neither a directory, nor a symlink.\n"
msgstr "%s: %s არც საქაღალდეა, არც სიმბმული.\n"
#, c-format
msgid "%s: Cannot read symbolic link %s: %s\n"
msgstr "%s: სიმბმულის წაკითხვის შეცდომა %s: %s\n"
#, c-format
msgid "%s: Suspiciously long symlink: %s\n"
msgstr "%s: საეჭვოდ გრძელი სიმბმული %s\n"
#, c-format
msgid "%s: Cannot create directory %s: %s\n"
msgstr "%s საქაღალდის (%s) შექმნის შეცდომა: %s\n"
#, c-format
msgid "%s: Cannot change owner of %s: %s\n"
msgstr "%s: %s-ის მფლობელის შეცვლის შეცდომა: %s\n"
#, c-format
msgid "%s: Cannot change mode of %s: %s\n"
msgstr "%s: %s-ის რეჟიმის შეცვლის შეცდომა: %s\n"
#, c-format
msgid "%s: unlink: %s: %s\n"
msgstr "%s: წაშლა: %s: %s\n"
#, c-format
msgid "%s: Cannot remove directory %s: %s\n"
msgstr "%s: საქაღალდის (%s) წაშლის შეცდომა: %s\n"
#, c-format
msgid "%s: Cannot rename %s to %s: %s\n"
msgstr "%s: %s-ის სახელის %s-მდე გადარქმევა შეუძლებელია: %s\n"
#, c-format
msgid "%s: Cannot remove %s: %s\n"
msgstr "%s: %s-ის წაშლა შეუძლებელია: %s\n"
#, c-format
msgid "%s: Cannot create symbolic link %s: %s\n"
msgstr "%s: სიმბმულის (%s) შექმნის შეცდომა: %s\n"
#, c-format
msgid "%s: Cannot change owners of %s: %s\n"
msgstr "%s: %s-ის მფლობელების შეცვლის შეცდომა: %s\n"
#, c-format
msgid "%s: Cannot lstat %s: %s\n"
msgstr "%s: %s-ის lstat-ის შეცდომა: %s\n"
#, c-format
msgid "%s: Warning, user %s has no tcb shadow file.\n"
msgstr "%s: გაფრთხილება: მომხმარებელს (%s) tcb shadow ფაილი არ გააჩნია.\n"
#, c-format
msgid ""
"%s: Emergency: %s's tcb shadow is not a regular file with st_nlink=1.\n"
"The account is left locked.\n"
msgstr ""
"%s: გადაუდებელი შემთხვევა: %s tcb ჩრდილი არ არის რეგულარული ფაილი st_nlink=1-"
"ით.\n"
"ანგარიში ჩაკეტილია.\n"
#, c-format
msgid "%s: mkdir: %s: %s\n"
msgstr "%s: mkdir: %s: %s\n"
#, c-format
msgid "%s: Cannot open %s: %s\n"
msgstr "%s: %s-ის გახსნის შეცდომა: %s\n"
#, c-format
msgid "%s: user %s is currently logged in\n"
msgstr "%s: მომხმარებელი %s ამჟამად შემოსულია\n"
@@ -661,6 +671,9 @@ msgstr ""
msgid " -R, --root CHROOT_DIR directory to chroot into\n"
msgstr " -R, --root CHROOT_DIR საქაღალდე chroot-ისთვის\n"
msgid " -P, --prefix PREFIX_DIR directory prefix\n"
msgstr " -P, --prefix PREFIX_DIR პრეფიქსი საქაღალდე\n"
msgid ""
" -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
msgstr ""
@@ -913,6 +926,10 @@ msgstr ""
" -s, --sha-rounds წრეების რიცხვი SHA, BCRYPT\n"
" და YESCRYPT დაშიფვრის ალგორითმებისთვის\n"
#, c-format
msgid "%s: no crypt method defined\n"
msgstr "%s: დაშიფვრის მეთოდი აღწერილი არაა\n"
#, c-format
msgid "%s: %s flag is only allowed with the %s flag\n"
msgstr "%s: ალამი %s მხოლოდ ალამ %s -სთან ერთადაა ნებადართული\n"
@@ -965,6 +982,15 @@ msgstr ""
msgid "Login Shell"
msgstr "შესვლს გარსი"
#, c-format
#| msgid "%s: Cannot get the size of %s: %s\n"
msgid "Cannot parse shell files: %s"
msgstr "ვერ დავამუშავე გარსის ფაილები: %s"
#, c-format
msgid "Cannot evaluate entries in shell files: %s"
msgstr "გარსის ფაილების ჩანაწერების შეფასება შეუძლებელია: %s"
#, c-format
msgid "You may not change the shell for '%s'.\n"
msgstr "%s-ის გარსის შეცვლა არ შეგიძლიათ.\n"
@@ -977,6 +1003,10 @@ msgstr "%s-ის გარსის შეცვლა\n"
msgid "%s: Invalid entry: %s\n"
msgstr "%s: არასწორი ჩანაწერი: %s\n"
#, c-format
msgid "%s: Warning: %s is an invalid shell\n"
msgstr "%s: გაფრთხილება: %s არასწორი გარსია\n"
#, c-format
msgid "%s: %s is an invalid shell\n"
msgstr "%s: %s არასწორი გარსია\n"
@@ -1222,9 +1252,6 @@ msgstr ""
msgid " -r, --system create a system account\n"
msgstr " -r, --system სისტემური ანგარიშის შექმნა\n"
msgid " -P, --prefix PREFIX_DI directory prefix\n"
msgstr " -P, --prefix PREFIX_DI პრეფიქსი საქაღალდე\n"
msgid " -U, --users USERS list of user members of this group\n"
msgstr " -U, --users USERS ამ ჯგუფის წევრების სია\n"
@@ -1236,6 +1263,10 @@ msgstr "წევრის არასწორი მომხმარებ
msgid "%s: '%s' is not a valid group name\n"
msgstr "%s: %s ჯგუფის სწორ სახელს არ წარმოადგენს\n"
#, c-format
msgid "%s: cannot open %s: %s\n"
msgstr "%s: %s-ის გახსნის შეცდომა: %s\n"
#, c-format
msgid "%s: invalid group ID '%s'\n"
msgstr "%s: ჯგუფის არასწორი ID '%s'\n"
@@ -1516,7 +1547,7 @@ msgstr ""
"ჩანაწერების ჩვენება\n"
msgid ""
" -C, --clear clear lastlog record of an user (usable only "
" -C, --clear clear lastlog record of a user (usable only "
"with -u)\n"
msgstr ""
" -C, --clear მომხმარებლის lastlog ჩანაწერის გასუფთავება "
@@ -1622,11 +1653,6 @@ msgstr ""
msgid "%s: Cannot possibly work without effective root\n"
msgstr "%s: root-ის უფლებებით ალბათ ვერ ვიმუშავებ\n"
msgid "No utmp entry. You must exec \"login\" from the lowest level \"sh\""
msgstr ""
"\"utmp\"-ის ჩანაწერი არ არსებობს. \"login\"-ი \"sh\"-ის უმდაბლესი დონიდან "
"უნდა გაუშვათ"
#, c-format
msgid ""
"\n"
@@ -1660,14 +1686,6 @@ msgstr "მომხმარებლის სახელი არასწ
msgid "Cannot find user (%s)\n"
msgstr "მომხმარებლის (%s) პოვნა შეუძლებელია\n"
#, c-format
msgid ""
"\n"
"%s login: "
msgstr ""
"\n"
"%s მომხმარებლის სახელი: "
#, c-format
msgid "%s: failure forking: %s"
msgstr "%s: განტოტვის შეცდომა: %s"
@@ -1703,11 +1721,15 @@ msgid "%s: gid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
msgstr "%s: gid -ის დიაპაზონი [%lu-%lu) -> [%lu-%lu) დაუშვებელია\n"
#, c-format
#| msgid ""
#| "usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> "
#| "<count> ] ... \n"
msgid ""
"usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> <count> ] ... \n"
"usage: %s [<pid|fd:<pidfd>] <gid> <lowergid> <count> [ <gid> <lowergid> "
"<count> ] ... \n"
msgstr ""
"გამოყენება: %s <pid> <gid> <lowergid> <რაოდენობა> [ <gid> <lowergid> "
"<რაოდენობა> ] ... \n"
"გამოყენება: %s [<pid|fd:<pidfd>] <gid> <lowergid> <რაოდენობა> [ <gid> "
"<lowergid> <რაოდენობა> ] ... \n"
#, c-format
msgid "%s: kernel doesn't support setgroups restrictions\n"
@@ -1730,20 +1752,16 @@ msgid "%s: failed to setgroups %s policy: %s\n"
msgstr "%s: setgroups-ის შეცდომა %s პოლიტიკა: %s\n"
#, c-format
msgid "%s: Could not open proc directory for target %u\n"
msgstr "%s: proc საქაღალდის გახსნის შეცდომა სამიზნისთვის %u\n"
#, c-format
msgid "%s: Could not stat directory for target %u\n"
msgstr "%s: საქაღალდის აღმოჩენის შეცდომა სამიზნისთვის: %u\n"
msgid "%s: Could not stat directory for process\n"
msgstr "%s: საქაღალდის აღმოჩენის შეცდომა პროცესისთვის\n"
#, c-format
msgid ""
"%s: Target %u is owned by a different user: uid:%lu pw_uid:%lu st_uid:%lu, "
"gid:%lu pw_gid:%lu st_gid:%lu\n"
"%s: Target process is owned by a different user: uid:%lu pw_uid:%lu st_uid:"
"%lu, gid:%lu pw_gid:%lu st_gid:%lu\n"
msgstr ""
"%s: სამიზნე %u სხვა მომხმარებლისაა: uid:%lu pw_uid:%lu st_uid:%lu, gid:%lu "
"pw_gid:%lu st_gid:%lu\n"
"%s: სამიზნე პროცესის მფლობელი სხვა მომხმარებლია: uid:%lu pw_uid:%lu st_uid:"
"%lu, gid:%lu pw_gid:%lu st_gid:%lu\n"
msgid "Usage: newgrp [-] [group]\n"
msgstr "გამოყენება: newgrp [-] [ჯგუფი]\n"
@@ -1774,19 +1792,19 @@ msgid "%s: uid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
msgstr "%s: uid -ის დიაპაზონი [%lu-%lu) -> [%lu-%lu) დაუშვებელია\n"
#, c-format
#| msgid ""
#| "usage: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> "
#| "<count> ] ... \n"
msgid ""
"usage: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> <count> ] ... \n"
"usage: %s [<pid>|fd:<pidfd>] <uid> <loweruid> <count> [ <uid> <loweruid> "
"<count> ] ... \n"
msgstr ""
"გამოყენება: %s <pid> <uid> <loweruid> <რაოდენობა> [ <uid> <loweruid> "
"<რაოდენობა> ] ... \n"
"გამოყენება: %s [<pid>|fd:<pidfd>] <uid> <loweruid> <რაოდენობა> [ <uid> "
"<loweruid> <რაოდენობა> ] ... \n"
#, c-format
msgid ""
"%s: Target process %u is owned by a different user: uid:%lu pw_uid:%lu "
"st_uid:%lu, gid:%lu pw_gid:%lu st_gid:%lu\n"
msgstr ""
"%s: სამიზნე პროცესი %u სხვა მომხმარებლითაა გაშვებული: uid:%lu pw_uid:%lu "
"st_uid:%lu, gid:%lu pw_gid:%lu st_gid:%lu\n"
msgid "%s: Could not stat directory for target process\n"
msgstr "%s: საქაღალდის აღმოჩენის შეცდომა სამიზნე პროცესისთვის\n"
msgid " -b, --badname allow bad names\n"
msgstr " -b, --badname სახელების სისწორე არ შემოწმდება\n"
@@ -1807,6 +1825,10 @@ msgid "%s: invalid user name '%s': use --badname to ignore\n"
msgstr ""
"%s: მომხმარებლის არასწორი სახელი '%s': დასაიგნორებლად გამოიყენეთ --badname\n"
#, c-format
msgid "%s: Provide '--crypt-method' before number of rounds\n"
msgstr "%s: მიაწოდეთ '--crypt-method', წრეების რაოდენობამდე\n"
#, c-format
msgid "%s: line %d: invalid line\n"
msgstr "%s: ხაზი %d: არასწორი ხაზი\n"
@@ -1829,6 +1851,11 @@ msgstr "%s: ხაზი %d: ჯგუფის შექმნა შეუძ
msgid "%s: line %d: user '%s' does not exist in %s\n"
msgstr "%s: ხაზი %d: მომხმარებელი '%s' %s-ში არ არსებობს\n"
#, c-format
#| msgid "%s: unlink: %s: %s\n"
msgid "%s: line %d: %s\n"
msgstr "%s: ხაზი %d: %s\n"
#, c-format
msgid "%s: line %d: can't update password\n"
msgstr "%s: ხაზი %d: პაროლის განახლება შეუძლებელია\n"
@@ -1849,14 +1876,14 @@ msgstr "%s: ხაზი %d: chown %s -ის შეცდომა: %s\n"
msgid "%s: line %d: can't update entry\n"
msgstr "%s: ხაზი %d: ჩანაწერის განახლების შეცდომა\n"
#, c-format
msgid "%s: failed to prepare new %s entry\n"
msgstr "%s: ახალი %s ჩანაწერის მომზადების შეცდომა\n"
#, c-format
msgid "%s: can't find subordinate user range\n"
msgstr "%s: დაქვემდებარებული მომხმარებლის დიაპაზონის პოვნა შეუძლებელია\n"
#, c-format
msgid "%s: failed to prepare new %s entry\n"
msgstr "%s: ახალი %s ჩანაწერის მომზადების შეცდომა\n"
#, c-format
msgid "%s: can't find subordinate group range\n"
msgstr "%s: დაქვემდებარებული ჯგუფის დიაპაზონის პოვნა შეუძლებელია\n"
@@ -1934,6 +1961,9 @@ msgstr ""
"რაოდენობის \n"
" MAX_DAYS-ზე დაყენება\n"
msgid " -s, --stdin read new token from stdin\n"
msgstr " -s, --stdin ახალი კოდების stdin-დან წაკითხვა\n"
msgid "Old password: "
msgstr "ძველი პაროლი: "
@@ -1995,6 +2025,11 @@ msgstr ""
msgid "%s: repository %s not supported\n"
msgstr "%s: მხარდაუჭერელი რეპოზიტორია: %s\n"
#, c-format
msgid "%s: only root can use --stdin/-s option\n"
msgstr ""
"%s: --stdin/-s პარამეტრის გამოყენება, მხოლოდ, root მომხმარებელს შეუძლია\n"
#, c-format
msgid "%s: root is not authorized by SELinux to change the password of %s\n"
msgstr ""
@@ -2148,11 +2183,9 @@ msgstr "%s: სიგნალის გაუმართაობა\n"
msgid "Session terminated, terminating shell..."
msgstr "სესია გაწყდა. გარსის დასრულება...."
#, c-format
msgid " ...killed.\n"
msgstr " ...მოკლულია.\n"
#, c-format
msgid " ...waiting for child to terminate.\n"
msgstr " ... ველოდები შვილი პროცესების დასრულებას.\n"
@@ -2229,6 +2262,11 @@ msgstr "%s: su-ის ავტორიზაცია ამჟამად
msgid "No passwd entry for user '%s'\n"
msgstr "Passwd ფაილში მომხმარებლისთვის \"%s\" ჩანაწერი არ არსებობს\n"
#, c-format
#| msgid "Invalid member username %s\n"
msgid "Overlong user name '%s'\n"
msgstr "მეტისმეტად გრძელი მომხმარებლის სახელი '%s'\n"
#, c-format
msgid "%s: must be run from a terminal\n"
msgstr "%s: ტერმინალიდან გაშვება აუცილებელია\n"
@@ -2274,6 +2312,15 @@ msgstr "%s: %s შეიქმნა, მაგრამ ვერ ვშლი\
msgid "%s: the %s configuration in %s will be ignored\n"
msgstr "%s: %s-ის კონფიგურაცია %s-ში იგნორირებული იქნება\n"
#, c-format
msgid ""
"%s: the '%s' configuration in %s has an invalid group, ignoring the bad "
"group\n"
msgstr ""
"%s: '%s'-ის კონფიგურაციას %s-ში არასწორი ჯგუფი აქვს. არასწორი ჯგუფების "
"გამოტოვება\n"
"\n"
#, c-format
msgid "%s: cannot create new defaults file: %s\n"
msgstr "%s: ნაგულისხმები მნიშვნელობების შემცველი ფაილის შექმნის შეცდომა; %s\n"
@@ -2370,6 +2417,13 @@ msgstr ""
" -f, --inactive INACTIVE ახალი ანგარიშის პაროლის არააქტიურობის "
"პერიოდი\n"
msgid ""
" -F, --add-subids-for-system add entries to sub[ud]id even when adding a "
"system user\n"
msgstr ""
" -F, --add-subids-for-system ჩანაწერების დამატება sub[ud]id-ში სისტემური "
"მომხმარებლის დამატების დროსაც კი\n"
msgid ""
" -g, --gid GROUP name or ID of the primary group of the new\n"
" account\n"
@@ -2437,8 +2491,15 @@ msgid ""
" -Z, --selinux-user SEUSER use a specific SEUSER for the SELinux user "
"mapping\n"
msgstr ""
" -Z, --selinux-user SEUSER SELinux -ის მომხმარებელთან ბმისთვის "
"მითითებლი SEUSER -ის გამოყენება\n"
" -Z, --selinux-user SEUSER მითითებული SEUSER -ის გამოყენება SELinux-ის "
"მომხმარებლის ასახვისთვის\n"
msgid ""
" --selinux-range SERANGE use a specific MLS range for the SELinux "
"user mapping\n"
msgstr ""
" --selinux-user SERANGE მითითებული MLS შუალედის გამოყენება SELinux-ის "
"მომხმარებლის ასახვისთვის\n"
#, c-format
msgid "%s: invalid base directory '%s'\n"
@@ -2571,6 +2632,12 @@ msgstr ""
msgid "Setting mailbox file permissions"
msgstr "საფოსტო ყუთის ფაილის წვდომების დაყენება"
msgid "Synchronize mailbox file"
msgstr "საფოსტო ყუთის ფაილის სინქრონიზაცია"
msgid "Closing mailbox file"
msgstr "საფოსტო ყუთის ფაილის დახურვა"
#, c-format
msgid "%s warning: %s's uid %d is greater than SYS_UID_MAX %d\n"
msgstr ""
@@ -2836,6 +2903,12 @@ msgstr ""
" -Z, --selinux-user SEUSER ანგარიშის SELinux -ის მითითებულ "
"მომხმარებელზე მიბმა\n"
msgid ""
" --selinux-range SERANGE new SELinux MLS range for the user account\n"
msgstr ""
" --selinux-range SERANGE ახალი SELinux MLS შუალედი მომხმარებლის "
"ანგარიშისთვის\n"
#, c-format
msgid ""
"%s: unlocking the user's password would result in a passwordless account.\n"
@@ -2914,18 +2987,38 @@ msgstr "%s: ძველი საწყისი საქაღალდის
msgid "%s: cannot rename directory %s to %s\n"
msgstr "%s: საქაღალდის სახელის %s-დან %s-ზე გადარქმევის შეცდომა\n"
#, c-format
msgid ""
"%s: The previous home directory (%s) does not exist or is inaccessible. Move "
"cannot be completed.\n"
msgstr ""
"%s: წინა საწყისი საქაღალდე (%s) არ არსებობს ან ხელმისაწვდომი არაა. გადატანის "
"დასრულება შეუძლებელია.\n"
#, c-format
msgid "%s: failed to copy the lastlog entry of user %lu to user %lu: %s\n"
msgstr ""
"%s: lastlog-ის ჩანაწერის ერთი მომხმარებლიდან (%lu) მეორეზე (%lu) კოპირების "
"შეცდომა: %s\n"
#, c-format
msgid "%s: failed to copy the lastlog entry of user %ju to user %ju: %s\n"
msgstr ""
"%s: lastlog-ის ჩანაწერის ერთი მომხმარებლიდან (%ju) მეორეზე (%ju) კოპირების "
"შეცდომა: %s\n"
#, c-format
msgid "%s: failed to copy the faillog entry of user %lu to user %lu: %s\n"
msgstr ""
"%s: faillog -ის ჩანაწერის ერთი მომხმარებლიდან (%lu) მეორეზე (%lu) კოპირების "
"შეცდომა: %s\n"
#, c-format
msgid "%s: failed to copy the faillog entry of user %ju to user %ju: %s\n"
msgstr ""
"%s: faillog -ის ჩანაწერის ერთი მომხმარებლიდან (%ju) მეორეზე (%ju) კოპირების "
"შეცდომა: %s\n"
#, c-format
msgid "%s: warning: %s not owned by %s\n"
msgstr "%s: გაფრთხილება: %s-ის მფლობელი %s არაა\n"
@@ -3026,8 +3119,9 @@ msgstr "მონახაზის ფაილის წაშლის შე
msgid "failed to stat edited file"
msgstr "რედაქტირებული ფაილის აღმოჩენა შეუძლებელია"
msgid "failed to allocate memory"
msgstr "მეხსიერების გამოყოფის შეცდომა"
#| msgid "%s: snprintf failed!\n"
msgid "asprintf(3) failed"
msgstr "asprintf(3) ჩავარდა"
msgid "failed to create backup file"
msgstr "მარქაფის ფაილის შექმნის შეცდომა"
@@ -3039,3 +3133,30 @@ msgstr "%s: %s-ის აღდგენის შეცდომა: %s (თქ
#, c-format
msgid "%s: failed to find tcb directory for %s\n"
msgstr "%s: %s-სთვის tcb საქაღალდის პოვნის შეცდომა\n"
#~ msgid "too simple"
#~ msgstr "ძალიან მარტივია"
#, c-format
#~ msgid "Unable to obtain random bytes.\n"
#~ msgstr "შემთხვევითი ბაიტების მიღების შეცდომა.\n"
#~ msgid "No utmp entry. You must exec \"login\" from the lowest level \"sh\""
#~ msgstr ""
#~ "\"utmp\"-ის ჩანაწერი არ არსებობს. \"login\"-ი \"sh\"-ის უმდაბლესი "
#~ "დონიდან უნდა გაუშვათ"
#, c-format
#~ msgid "%s: Could not open proc directory for target %u\n"
#~ msgstr "%s: proc საქაღალდის გახსნის შეცდომა სამიზნისთვის %u\n"
#, c-format
#~ msgid ""
#~ "%s: Target %u is owned by a different user: uid:%lu pw_uid:%lu st_uid:"
#~ "%lu, gid:%lu pw_gid:%lu st_gid:%lu\n"
#~ msgstr ""
#~ "%s: სამიზნე %u სხვა მომხმარებლისაა: uid:%lu pw_uid:%lu st_uid:%lu, gid:"
#~ "%lu pw_gid:%lu st_gid:%lu\n"
#~ msgid "failed to allocate memory"
#~ msgstr "მეხსიერების გამოყოფის შეცდომა"

View File

@@ -76,7 +76,7 @@ static long expdate;
/* local function prototypes */
NORETURN static void usage (int status);
static int new_fields (void);
static void print_date (time_t date);
static void print_day_as_date (long day);
static void list_fields (void);
static void process_flags (int argc, char **argv);
static void check_flags (int argc, int opt_index);
@@ -231,10 +231,22 @@ static int new_fields (void)
return 1;
}
static void print_date (time_t date)
static void
print_day_as_date(long day)
{
struct tm *tp;
char buf[80];
char buf[80];
time_t date;
struct tm *tp;
if (day < 0) {
puts(_("never"));
return;
}
if (__builtin_mul_overflow(day, DAY, &date)) {
puts(_("future"));
return;
}
tp = gmtime (&date);
if (NULL == tp) {
@@ -245,6 +257,7 @@ static void print_date (time_t date)
}
}
/*
* list_fields - display the current values of the expiration fields
*
@@ -254,21 +267,15 @@ static void print_date (time_t date)
*/
static void list_fields (void)
{
long changed = 0;
long expires;
/*
* The "last change" date is either "never" or the date the password
* was last modified. The date is the number of days since 1/1/1970.
*/
(void) fputs (_("Last password change\t\t\t\t\t: "), stdout);
if (lstchgdate < 0 || lstchgdate > LONG_MAX / DAY) {
(void) puts (_("never"));
} else if (lstchgdate == 0) {
if (lstchgdate == 0) {
(void) puts (_("password must be changed"));
} else {
changed = lstchgdate * DAY;
print_date (changed);
print_day_as_date(lstchgdate);
}
/*
@@ -281,11 +288,11 @@ static void list_fields (void)
} else if ( (lstchgdate < 0)
|| (maxdays >= 10000)
|| (maxdays < 0)
|| ((LONG_MAX - changed) / DAY < maxdays)) {
|| (LONG_MAX - lstchgdate < maxdays))
{
(void) puts (_("never"));
} else {
expires = changed + maxdays * DAY;
print_date (expires);
print_day_as_date(lstchgdate + maxdays);
}
/*
@@ -301,12 +308,12 @@ static void list_fields (void)
|| (inactdays < 0)
|| (maxdays >= 10000)
|| (maxdays < 0)
|| (maxdays > LONG_MAX - inactdays)
|| ((LONG_MAX - changed) / DAY < maxdays + inactdays)) {
|| (LONG_MAX - inactdays < maxdays)
|| (LONG_MAX - lstchgdate < maxdays + inactdays))
{
(void) puts (_("never"));
} else {
expires = changed + (maxdays + inactdays) * DAY;
print_date (expires);
print_day_as_date(lstchgdate + maxdays + inactdays);
}
/*
@@ -314,12 +321,7 @@ static void list_fields (void)
* password expiring or not.
*/
(void) fputs (_("Account expires\t\t\t\t\t\t: "), stdout);
if (expdate < 0 || LONG_MAX / DAY < expdate) {
(void) puts (_("never"));
} else {
expires = expdate * DAY;
print_date (expires);
}
print_day_as_date(expdate);
/*
* Start with the easy numbers - the number of days before the

View File

@@ -572,11 +572,13 @@ int main (int argc, char **argv)
}
#ifdef RLOGIN
if (rflg) {
size_t max_size = sysconf(_SC_LOGIN_NAME_MAX);
size_t max_size = sysconf(_SC_LOGIN_NAME_MAX);
assert (NULL == username);
username = XMALLOC(max_size + 1, char);
username[max_size] = '\0';
if (do_rlogin (hostname, username, max_size, term, sizeof term)) {
username = XMALLOC(max_size, char);
username[max_size - 1] = '\0';
if (do_rlogin(hostname, username, max_size, term, sizeof(term)))
{
preauth_flag = true;
} else {
free (username);
@@ -879,15 +881,16 @@ int main (int argc, char **argv)
failed = false; /* haven't failed authentication yet */
if (NULL == username) { /* need to get a login id */
size_t max_size = sysconf(_SC_LOGIN_NAME_MAX);
size_t max_size = sysconf(_SC_LOGIN_NAME_MAX);
if (subroot) {
closelog ();
exit (1);
}
preauth_flag = false;
username = XMALLOC(max_size + 1, char);
username[max_size] = '\0';
login_prompt (username, max_size);
username = XMALLOC(max_size, char);
username[max_size - 1] = '\0';
login_prompt(username, max_size);
if ('\0' == username[0]) {
/* Prompt for a new login */

View File

@@ -331,6 +331,13 @@ static struct ulong_range getulong_range(const char *str)
if (first > last)
goto out;
/*
* uid_t in linux is an unsigned int, anything over this is an invalid
* range will be later refused anyway by get_map_ranges().
*/
if (first > UINT_MAX || last > UINT_MAX)
goto out;
result.first = (unsigned long)first;
result.last = (unsigned long)last;
out:

View File

@@ -134,15 +134,15 @@ test_is_valid_user_name_long(void **state)
char *name;
max = sysconf(_SC_LOGIN_NAME_MAX);
name = MALLOC(max + 2, char);
name = MALLOC(max + 1, char);
assert_true(name != NULL);
memset(name, '_', max + 1);
name[max + 1] = '\0';
assert_true(false == is_valid_user_name(name));
memset(name, '_', max);
name[max] = '\0';
assert_true(false == is_valid_user_name(name));
name[max - 1] = '\0';
assert_true(is_valid_user_name(name));
free(name);