Compare commits

...

329 Commits
4.4 ... 4.8

Author SHA1 Message Date
Serge Hallyn
81de782d1e Release 4.8
Signed-off-by: Serge Hallyn <shallyn@cisco.com>
2019-12-01 11:36:13 -06:00
Serge Hallyn
d83eccdded fix type in po/POTFILES.in
Signed-off-by: Serge Hallyn <shallyn@cisco.com>
2019-12-01 11:36:13 -06:00
Serge Hallyn
681b66b13c Merge pull request #179 from seitokaichou/master
WIP: Initial bcrypt support
2019-12-01 11:02:23 -06:00
prez
2958bd050b Initial bcrypt support 2019-12-01 11:00:57 -06:00
Serge Hallyn
38f493aff2 Merge pull request #192 from Polynomial-C/optional_su
build: Make build/installation of su and its support files optional
2019-12-01 10:51:21 -06:00
Lars Wendler
19bac44dde build: Make build/installation of su and its support files optional
Enabled by default
This is necessary because coreutils and util-linux can also provide su

Signed-off-by: Lars Wendler <polynomial-c@gentoo.org>
2019-11-19 11:28:45 +01:00
Christian Brauner
b49712ed32 Merge pull request #191 from topimiettinen/sync-passwd-5-and-shadow-5
man: sync and reorder password field descriptions
2019-11-16 15:06:03 +01:00
Topi Miettinen
cdbe1310cc man: sync and reorder password field descriptions
Synchronize how passwd(5) and shadow(5) describe the password field.
Reorder the descriptions more logically.

Signed-off-by: Topi Miettinen <toiwoton@gmail.com>
2019-11-16 15:35:08 +02:00
Serge Hallyn
b462f5335f Merge pull request #190 from jubalh/fixtypo
Fix typo in access of shell command
2019-11-12 07:12:06 -06:00
Michael Vetter
115a4e89e2 Fix typo in access of shell command
Fix typo in 88fa0651bf.
For some reason my git push -f seems not to have worked.
2019-11-12 08:38:08 +01:00
Serge Hallyn
9d935d9be1 Merge pull request #189 from hallyn/2019-11-11/vpiw
Fix vipw not resuming correctly when suspended
2019-11-11 20:22:49 -06:00
Todd C. Miller
7eca1112fb Fix vipw not resuming correctly when suspended
Closes #185

If vipw is suspended (e.g. via control-Z) and then resumed, it often gets
immediately suspended. This is easier to reproduce on a multi-core system.

root@buster:~# /usr/sbin/vipw

[1]+  Stopped                 /usr/sbin/vipw
root@buster:~# fg
/usr/sbin/vipw

[1]+  Stopped                 /usr/sbin/vipw

root@buster:~# fg
[vipw resumes on the second fg]

The problem is that vipw forks a child process and calls waitpid() with the
WUNTRACED flag. When the child process (running the editor) is suspended, the
parent sends itself SIGSTOP to suspend the main vipw process. However, because
the main vipw is in the same process group as the editor which received the ^Z,
the kernel already sent the main vipw SIGTSTP.

If the main vipw receives SIGTSTP before the child, it will be suspended and
then, once resumed, will proceed to suspend itself again.

To fix this, run the child process in its own process group as the foreground
process group. That way, control-Z will only affect the child process and the
parent can use the existing logic to suspend the parent.
2019-11-11 20:19:57 -06:00
Serge Hallyn
fe2a266c50 Merge pull request #188 from rbalint/pot
Allow translation of new strings by adding new files to POTFILES.in
2019-11-11 18:12:36 -06:00
Serge Hallyn
e97df9b1ec Merge pull request #187 from jubalh/useradd-s
useradd: check for valid shell argument
2019-11-11 18:10:56 -06:00
Miroslav Kure
d048459d36 [i18n] Allow translation of new strings by adding new files to POTFILES.in 2019-11-11 16:44:04 +01:00
Michael Vetter
88fa0651bf useradd: check for valid shell argument
Check whether shell argument given with `-s` is actually present and executable.
And is not a directory.

Fix https://github.com/shadow-maint/shadow/issues/186
2019-11-11 13:46:25 +01:00
Serge Hallyn
4e038f3ae7 Merge pull request #184 from FRidh/itstool
man: generate translations using itstool instead of xml2po
2019-11-05 08:58:13 -06:00
Frederik Rietdijk
6c6c8d3a33 man: generate translations using itstool instead of xml2po
This patch was taken from Fedora Rawhide
b41cff1956/f/shadow-4.6-use-itstool.patch
2019-11-03 13:04:17 +01:00
Serge Hallyn
a8a921184f Merge pull request #183 from cgzones/selinux
migrate to new SELinux api
2019-10-28 23:40:06 -05:00
Christian Göttsche
cbd2472b7c migrate to new SELinux api
Using hard-coded access vector ids is deprecated and can lead to issues with custom SELinux policies.
Switch to `selinux_check_access()`.

Also use the libselinux log callback and log if available to audit.
This makes it easier for users to catch SELinux denials.

Drop legacy shortcut logic for passwd, which avoided a SELinux check if uid 0 changes a password of a user which username equals the current SELinux user identifier.
Nowadays usernames rarely match SELinux user identifiers and the benefit of skipping a SELinux check is negligible.

Signed-off-by: Christian Göttsche <cgzones@googlemail.com>
2019-10-22 14:56:31 +02:00
Serge Hallyn
a0efca4581 remove unused fn commonio_next
Signed-off-by: Serge Hallyn <shallyn@cisco.com>
2019-10-12 20:03:51 -05:00
Serge Hallyn
4e1da34601 compile warnings: Zflg unused when !selinux
Signed-off-by: Serge Hallyn <shallyn@cisco.com>
2019-10-12 20:03:51 -05:00
Serge Hallyn
b03df41906 remove unused variables
parent, user_id, and group_id are unused.

Signed-off-by: Serge Hallyn <shallyn@cisco.com>
2019-10-12 20:03:32 -05:00
Serge Hallyn
8ca6eea938 Merge pull request #181 from pan93412/master
l10n(zh_TW): update translations
2019-10-07 09:00:19 -05:00
pan93412
1c2ad5e6b9 l10n(zh_TW): update translations 2019-10-07 18:26:33 +08:00
Serge Hallyn
991fee82df Merge pull request #180 from thkukuk/libeconf
Add support for a vendor directory and libeconf
2019-10-05 22:34:29 -05:00
Thorsten Kukuk
b52ce71c27 Add support for a vendor directory and libeconf
With this, it is possible for Linux distributors to store their
supplied default configuration files somewhere below /usr, while
/etc only contains the changes made by the user. The new option
--enable-vendordir defines where the shadow suite should additional
look for login.defs if this file is not in /etc.
libeconf is a key/value configuration file reading library, which
handles the split of configuration files in different locations
and merges them transparently for the application.
2019-10-05 22:17:49 -05:00
Serge Hallyn
e78d22469f Merge pull request #177 from edneville/conflicts_between_system_users_useradd_and_pwck
pwck.c: only check home dirs if set and not a system user
2019-10-05 22:08:08 -05:00
ed
c4e8b411d4 pwck.c: only check home dirs if set and not a system user
Closes #126

Changelog: pwck, better to look at array than to use strnlen.
2019-10-05 22:04:37 -05:00
Serge Hallyn
3a51b90145 Merge pull request #176 from edneville/force_bad_name
chkname.c, pwck.c, useradd.c, usermod.c, newusers.c: Allow names that…
2019-10-04 16:41:39 -07:00
ed
a2cd3e9ef0 chkname.c, pwck.c, useradd.c, usermod.c, newusers.c: Allow names that do not conform to standards
Closes #121.

Changelog: squashed commits fixing tab style
Changelog: update 'return true' to match file's style (no parens).
2019-10-04 18:40:41 -05:00
ed@s5h.net
1cbb562c23 lib/sgetgrent.c: change to warn when data remains 2019-10-04 18:30:41 -05:00
ed@s5h.net
558977bb2b sgetpwent.c/sgetgrent.c: check for additional data at end of line 2019-10-04 18:30:38 -05:00
Serge Hallyn
332709da65 Merge branch 'master' of git+ssh://github.com/shadow-maint/shadow 2019-10-04 18:28:34 -05:00
Serge Hallyn
a74587a4ea Merge pull request #173 from edneville/issue_105_106
useradd.c: including directory name in directory existence error message
2019-08-07 22:44:51 -05:00
Serge Hallyn
1e13749483 Merge pull request #172 from edneville/master
chage.c: add support for YYYY-MM-DD date printing
2019-08-07 22:42:03 -05:00
Serge Hallyn
1a1b8fcc36 Merge pull request #171 from falconindy/master
Honor --sbindir and --bindir for binary installation
2019-08-07 22:39:08 -05:00
ed
23262b249c src/useradd.c: including directory name in dir existence error. Prefixing output lines with program name. 2019-08-07 19:41:12 +01:00
ed
5687be5f31 chage.c: add support for YYYY-MM-DD date printing 2019-08-06 19:40:36 +01:00
Dave Reisner
e293aa9cfc Honor --sbindir and --bindir for binary installation
Some distros don't care about the split between /bin, /sbin, /usr/bin,
and /usr/sbin, so let them easily stuff binaries wherever they want.
2019-08-02 18:45:19 -04:00
Dave Reisner
edf7547ad5 Fix failing chmod calls on installation for suidubins
suidubins should be suidusbins, since these binaries are installed
${prefix}/sbin. This historically hasn't broken the build because
chmod of newgidmap/newuidmap succeeds, causing make to think the command
succeeded. Configuring shadow with --with-fcaps removes these final two
entries and exposes the chmod failure to make.
2019-08-02 18:42:34 -04:00
Dave Reisner
2cac079ef4 Honor --sbindir and --bindir for binary installation
Some distros don't care about the split between /bin, /sbin, /usr/bin,
and /usr/sbin, so let them easily stuff binaries wherever they want.

This also fixes a problem during installation where-in a loop of 'chmod
4755' calls will mostly fail. However, because the last two succeed
(newuidmap/newgidmap), make considers the command to be a success.
Somewhat not-amusingly, configuring shadow with --with-fcaps will cause
installation to fail because the final chmod call is now a failing one.
2019-08-01 20:36:41 -05:00
Serge Hallyn
5afc1c5b5f Merge pull request #170 from stanislav-brabec/master
Fixes of LASTLOG_UID_MAX and login.defs
2019-07-31 10:40:43 -05:00
Stanislav Brabec
3025fefc41 login.defs: Cosmetic space change
Fix formatting of login.defs comments. Variables are preceeded by "#"
without space, comments are preceeded by "# ". It makes the file machine
parseable again.

Signed-off-by: Stanislav Brabec <sbrabec@suse.cz>
2019-07-26 22:47:05 +02:00
Stanislav Brabec
00a5cff244 login.defs: Really add LASTLOG_UID_MAX
However 46331648 mentions adding of LASTLOG_UID_MAX to login.defs, it did
not happen.

Signed-off-by: Stanislav Brabec <sbrabec@suse.cz>
2019-07-26 22:34:59 +02:00
Stanislav Brabec
fc0ed79e5d usermod.c: Fix invalid variable name
Fix invalid LASTLOG_MAX_UID variable name to correct LASTLOG_UID_MAX.

Signed-off-by: Stanislav Brabec <sbrabec@suse.cz>
2019-07-26 21:39:42 +02:00
Serge Hallyn
13c618465d Merge pull request #167 from yizhao1/fix
configure.ac: fix configure error with dash
2019-06-17 09:06:43 -05:00
Yi Zhao
3c52a84ff8 configure.ac: fix configure error with dash
A configure error occurs when /bin/sh -> dash:
  checking for is_selinux_enabled in -lselinux... yes
  checking for semanage_connect in -lsemanage... yes
  configure: 16322: test: yesyes: unexpected operator

Use "=" instead of "==" since dash doesn't support this operator.

Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
2019-06-17 15:42:07 +08:00
Serge Hallyn
2bb99b8fe6 release 4.7
Signed-off-by: Serge Hallyn <shallyn@cisco.com>
2019-06-13 11:38:49 -05:00
Serge Hallyn
d2808b1b51 github pages takes an index.html
Signed-off-by: Serge Hallyn <serge@hallyn.com>
2019-06-09 00:02:45 -05:00
Serge Hallyn
b679cdbd3e add README.md for the homepage
Signed-off-by: Serge Hallyn <serge@hallyn.com>
2019-06-08 23:51:32 -05:00
Christian Brauner
a5f034f272 Merge pull request #161 from tabraham/master
lib/spawn.c run_command: don't loop forever if waitpid() is returning ECHILD
2019-06-04 13:31:08 +02:00
Thomas Abraham
82fa6eccf9 lib/spawn.c run_command: don't loop forever if waitpid() is returning ECHILD
If SIGCHILD is being ignored, waitpid() will forever error with ECHILD and
this loop with never end, so don't loop if it errors with ECHILD.
2019-05-06 14:26:14 -04:00
Thomas Abraham
8d39357c84 Revert "lib/spawn.c run_command: don't loop forever if waitpid() is returning ECHILD"
This reverts commit 1697c192ac.
2019-05-06 14:23:58 -04:00
Serge Hallyn
aff40d8515 libmisc/btrfs: no sense trying to calculate 'btrfs' string
Signed-off-by: Serge Hallyn <shallyn@cisco.com>
2019-05-03 22:40:14 -07:00
Serge Hallyn
51cfc1f89a libmisc/btrfs: find btrfs command
Ubuntu for instance keeps it in /bin, not /sbin.  So look
for it in our usual places.

Signed-off-by: Serge Hallyn <shallyn@cisco.com>
2019-05-03 22:39:53 -07:00
Serge Hallyn
816220f90c autoconf: fix cut-paste errors in btrfs detection
Signed-off-by: Serge Hallyn <shallyn@cisco.com>
2019-05-03 22:39:47 -07:00
Adam Majer
50b23584d7 Add autotools support for BtrFS option
Feature is enabled by default, if headers are available. It can be
turned off explictly.
2019-05-03 22:38:23 -07:00
Adam Majer
c1d36a8acb Add support for btrfs subvolumes for user homes
new switch added to useradd command, --btrfs-subvolume-home. When
specified *and* the filesystem is detected as btrfs, it will create a
subvolume for user's home instead of a plain directory. This is done via
`btrfs subvolume` command.  Specifying the new switch while trying to
create home on non-btrfs will result in an error.

userdel -r will handle and remove this subvolume transparently via
`btrfs subvolume` command. Previosuly this failed as you can't rmdir a
subvolume.

usermod, when moving user's home across devices, will detect if the home
is a subvolume and issue an error messages instead of copying it. Moving
user's home (as subvolume) on same btrfs works transparently.
2019-05-03 22:38:23 -07:00
Christian Brauner
caefe9e8de Merge pull request #164 from t8m/use-lckpwdf
Use lckpwdf() again if prefix is not set and fix a possible DoS in locking
2019-05-03 10:43:41 +02:00
Tomas Mraz
64d7688acb Do not fail locking if there is a stale lockfile.
As the lockfiles have PID in the name, there can be no conflict
in the name with other process, so there is no point in using
O_EXCL and it only can fail if there is a stale lockfile from
previous execution that crashed for some reason.
2019-05-02 14:39:01 +02:00
Tomas Mraz
408b8a5482 Use the lckpwdf() again if prefix is not set
The implementation of prefix option dropped the use of lckpwdf().
However that is incorrect as other tools manipulating the shadow passwords
such as PAM use lckpwdf() and do not know anything about the
shadow's own locking mechanism.

This reverts the implementation to use lckpwdf() if prefix option
is not used.
2019-05-02 14:33:06 +02:00
Christian Brauner
ce2941ca0d Merge pull request #162 from jtojnar/check-correct-docbook
build: Check correct DocBook version
2019-04-30 20:39:22 +02:00
Jan Tojnar
47797ca665 build: Check correct DocBook version
The documentation uses DocBook 4.5 DOCTYPE but the configure script
checked for 4.1.2.
2019-04-30 20:35:07 +02:00
Thomas Abraham
1697c192ac lib/spawn.c run_command: don't loop forever if waitpid() is returning ECHILD
If SIGCHILD is being ignored, waitpid() will forever error with ECHILD and
this loop with never end, so don't loop if it erros with ECHILD.
2019-04-25 14:56:22 -04:00
Serge Hallyn
5837240451 usermod: print "no changes" to stdout, not stderr
Closes #113

Signed-off-by: Serge Hallyn <serge@hallyn.com>
2019-04-21 17:28:12 -05:00
Serge Hallyn
2c8171f8c8 Merge pull request #146 from lamby/reproducible-shadow-files
Make the sp_lstchg shadow field reproducible (re. #71)
2019-04-21 17:13:58 -05:00
Serge Hallyn
fbb59823c5 Merge pull request #143 from t8m/fedora
usermod: Guard against unsafe change of ownership of home contents
2019-04-21 16:56:36 -05:00
Serge Hallyn
fe87a1ad96 Merge pull request #158 from nathanruiz/master
Fix chpasswd long line handling
2019-04-21 16:50:07 -05:00
Serge Hallyn
38e3e35c72 Merge pull request #156 from cvuillemez/no_flush_in_read_only
Do not flush nscd and sssd cache in read-only mode
2019-04-15 00:17:32 -05:00
Nathan Ruiz
a8f7132113 Fix chpasswd long line handling 2019-04-10 07:56:59 +10:00
Chris Lamb
3d921155e0 gettime: Use secure_getenv over getenv. 2019-03-31 16:00:01 +01:00
Chris Lamb
fe34a2a0e4 Make the sp_lstchg shadow field reproducible (re. #71)
From <https://github.com/shadow-maint/shadow/pull/71>:

```
The third field in the /etc/shadow file (sp_lstchg) contains the date of
the last password change expressed as the number of days since Jan 1, 1970.
As this is a relative time, creating a user today will result in:

username:17238:0:99999:7:::
whilst creating the same user tomorrow will result in:

username:17239:0:99999:7:::
This has an impact for the Reproducible Builds[0] project where we aim to
be independent of as many elements the build environment as possible,
including the current date.

This patch changes the behaviour to use the SOURCE_DATE_EPOCH[1]
environment variable (instead of Jan 1, 1970) if valid.
```

This updated PR adds some missing calls to gettime (). This was originally
filed by Johannes Schauer in Debian as #917773 [2].

[0] https://reproducible-builds.org/
[1] https://reproducible-builds.org/specs/source-date-epoch/
[2] https://bugs.debian.org/917773
2019-03-31 16:00:01 +01:00
Christian Brauner
e24deea4c9 Merge pull request #157 from t8m/close-crash
Do not crash in commonio_close if database FILE not opened.
2019-03-25 12:56:55 -07:00
Tomas Mraz
d6276066dd Do not crash in commonio_close if database FILE not opened.
The db->fp can be NULL if commonio_unlock() is called when the
shadow file is opened but did not exist before.
2019-03-25 14:51:26 +01:00
Serge Hallyn
d2e1e9ce85 Add Christian to maintainers list
Signed-off-by: Serge Hallyn <shallyn@cisco.com>
2019-03-17 21:11:05 -05:00
Serge Hallyn
e61db2c618 README: Update the homepage link
and remove ftp.  Maybe i should run an ftp server for releases...

Signed-off-by: Serge Hallyn <shallyn@cisco.com>
2019-03-17 11:48:05 -05:00
Serge Hallyn
c40c49536e README: Add Eric to contributors list
subids were not a small amount of work.

Signed-off-by: Serge Hallyn <shallyn@cisco.com>
2019-03-17 11:39:24 -05:00
Charlie Vuillemez
dd2033c40c Do not flush nscd and sssd cache in read-only mode
Fix #155

signed-off-by: Charlie Vuillemez <cvuillemez@users.noreply.github.com>
2019-02-27 17:40:04 +01:00
Serge Hallyn
d66a1fe069 Merge pull request #153 from AlbanVidal/man-po-fr
French man translation update
2019-02-19 00:49:40 -06:00
Alban VIDAL
beb75c6fd6 French man translation update
- translated by Jean-Philippe MENGUAL
- proofread by the debian-l10n-french mailing list contributors

Signed-off-by: Alban VIDAL <alban.vidal@zordhak.fr>
2019-02-11 07:02:52 +01:00
Christian Brauner
c0c2b99164 Merge pull request #151 from t8m/uid-count-default
Fix the default mentioned in man page for SUB_UID/GID_COUNT variables.
2019-02-01 09:11:27 +01:00
Tomas Mraz
ebad423023 Fix the default mentioned in man page for SUB_UID/GID_COUNT variables. 2019-01-31 13:30:59 +01:00
Serge Hallyn
c5898d9f02 Merge pull request #148 from AlbanVidal/master
Sync po files from template "shadow.pot" file
2019-01-26 22:58:53 -06:00
Alban VIDAL
ee87cda65d Sync po files from pot shadow.pot file
Signed-off-by: Alban VIDAL <alban.vidal@zordhak.fr>
2019-01-19 13:32:42 +01:00
Tomas Mraz
5b41b7d1b1 usermod: Guard against unsafe change of ownership of home directory content
In case the home directory is not a real home directory
(owned by the user) but things like / or /var or similar,
it is unsafe to change ownership of home directory content.

The test checks whether the home directory is owned by the
user him/herself, if not no ownership modification of contents
is performed.
2018-12-18 16:32:13 +01:00
Tomas Mraz
4633164857 login.defs: Add LASTLOG_UID_MAX variable to limit lastlog to small uids.
As the large uids are usually provided by remote user identity and
authentication service, which also provide user login tracking,
there is no need to create a huge sparse file for them on every local
machine.

fixup! login.defs: Add LASTLOG_UID_MAX variable to limit lastlog to small uids.
2018-12-10 13:25:56 -06:00
Giuseppe Scrivano
59c2dabb26 idmap: always seteuid to the owner of the namespace
simplify the condition for setting the euid of the process.  Now it is
always set when we are running as root, the issue was introduced with
the commit 52c081b02c

Changelog: 2018-11-24 - seh - enforce that euid only gets set to ruid if
   it currently == 0 (i.e. really was setuid-*root*).

Closes: https://github.com/genuinetools/img/issues/191

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
Signed-off-by: Serge Hallyn <shallyn@cisco.com>
2018-11-24 17:30:46 -06:00
Serge Hallyn
42324e5017 Merge pull request #138 from brauner/2018-10-27/setuid_fscaps
new{g,u}idmap: align setuid and fscaps behavior
2018-10-27 19:00:23 -05:00
Christian Brauner
52c081b02c new{g,u}idmap: align setuid and fscaps behavior
Commit 1ecca8439d ("new[ug]idmap: not require CAP_SYS_ADMIN in the parent userNS")
does contain a wrong commit message, is lacking an explanation of the
issue, misses some simplifications and hardening features. This commit
tries to rectify this.

In (crazy) environment where all capabilities are dropped from the
capability bounding set apart from CAP_SET{G,U}ID setuid- and
fscaps-based new{g,u}idmap binaries behave differently when writing
complex mappings for an unprivileged user:

1. newuidmap is setuid

unshare -U sleep infinity &
newuidmap $? 0 100000 65536

First file_ns_capable(file, ns, CAP_SYS_ADMIN) is hit. This calls into
cap_capable() and hits the loop

for (;;) {
        /* Do we have the necessary capabilities? */
        if (ns == cred->user_ns)
                return cap_raised(cred->cap_effective, cap) ? 0 : -EPERM;

        /*
         * If we're already at a lower level than we're looking for,
         * we're done searching.
         */
        if (ns->level <= cred->user_ns->level)
                return -EPERM;

        /*
         * The owner of the user namespace in the parent of the
         * user namespace has all caps.
        */
        if ((ns->parent == cred->user_ns) && uid_eq(ns->owner, cred->euid))
                return 0;

        /*
         * If you have a capability in a parent user ns, then you have
         * it over all children user namespaces as well.
        */
        ns = ns->parent;
}

The first check fails and falls through to the end of the loop and
retrieves the parent user namespace and checks whether CAP_SYS_ADMIN is
available there which isn't.

2. newuidmap has CAP_SETUID as fscaps set

unshare -U sleep infinity &
newuidmap $? 0 100000 65536

The first file_ns_capable() check for CAP_SYS_ADMIN is passed since the
euid has not been changed:

if ((ns->parent == cred->user_ns) && uid_eq(ns->owner, cred->euid))
        return 0;

Now new_idmap_permitted() is hit which calls ns_capable(ns->parent,
CAP_SET{G,U}ID). This check passes since CAP_SET{G,U}ID is available in
the parent user namespace.
Now file_ns_capable(file, ns->parent, CAP_SETUID) is hit and the
cap_capable() loop (see above) is entered again. This passes

if (ns == cred->user_ns)
        return cap_raised(cred->cap_effective, cap) ? 0 : -EPERM;

since CAP_SET{G,U}ID is available in the parent user namespace. Now the
mapping can be written.

There is no need for this descrepancy between setuid and fscaps based
new{g,u}idmap binaries. The solution is to do a
seteuid() back to the unprivileged uid and PR_SET_KEEPCAPS to keep
CAP_SET{G,U}ID. The seteuid() will cause the
file_ns_capable(file, ns, CAP_SYS_ADMIN) check to pass and the
PR_SET_KEEPCAPS for CAP_SET{G,U}ID will cause the CAP_SET{G,U}ID to
pass.

Fixes: 1ecca8439d ("new[ug]idmap: not require CAP_SYS_ADMIN in the parent userNS")
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
2018-10-28 01:27:48 +02:00
Serge Hallyn
bb3f810611 Merge pull request #136 from giuseppe/fcap-newuidmap-newgidmap
newuidmap/newgidmap: install with file capabilities
2018-10-27 11:26:31 -05:00
Serge Hallyn
d5255da20b Merge pull request #132 from giuseppe/no-cap-sys-admin
newuidmap/newgidmap: do not require CAP_SYS_ADMIN in the parent user namespace
2018-10-27 11:22:37 -05:00
Giuseppe Scrivano
70971457b7 newuidmap/newgidmap: install with file capabilities
do not install newuidmap/newgidmap as suid binaries.  Running these
tools with the same euid as the owner of the user namespace to
configure requires only CAP_SETUID and CAP_SETGID instead of requiring
CAP_SYS_ADMIN when it is installed as a suid binary.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2018-10-24 23:10:59 +02:00
Serge Hallyn
ff8b1ebafa Merge pull request #118 from AdelieLinux/utmpx-only-support
[WIP] Support systems that only have utmpx
2018-10-23 22:35:19 -05:00
Serge Hallyn
83f1380600 Merge pull request #133 from t8m/trivial
Fix some issues found in Coverity scan.
2018-10-23 22:21:12 -05:00
Giuseppe Scrivano
1ecca8439d new[ug]idmap: not require CAP_SYS_ADMIN in the parent userNS
if the euid!=owner of the userns, the kernel returns EPERM when trying
to write the uidmap and there is no CAP_SYS_ADMIN in the parent
namespace.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2018-10-22 16:57:50 +02:00
Serge Hallyn
58ee899dce Merge pull request #128 from jhrozek/sssd
Flush sssd caches in addition to nscd caches
2018-10-18 12:26:38 -07:00
Tomas Mraz
10e388efc2 useradd: fix segfault trying to overwrite const data with mkstemp
Also fix memory leaks in error paths.
2018-10-12 10:14:02 +02:00
Tomas Mraz
fb97da1ce1 Fix some issues found in Coverity scan. 2018-10-10 12:22:04 +02:00
Jakub Hrozek
4aaf05d72e Flush sssd caches in addition to nscd caches
Some distributions, notably Fedora, have the following order of nsswitch
modules by default:
    passwd: sss files
    group:  sss files

The advantage of serving local users through SSSD is that the nss_sss
module has a fast mmapped-cache that speeds up NSS lookups compared to
accessing the disk an opening the files on each NSS request.

Traditionally, this has been done with the help of nscd, but using nscd
in parallel with sssd is cumbersome, as both SSSD and nscd use their own
independent caching, so using nscd in setups where sssd is also serving
users from some remote domain (LDAP, AD, ...) can result in a bit of
unpredictability.

More details about why Fedora chose to use sss before files can be found
on e.g.:
    https://fedoraproject.org//wiki/Changes/SSSDCacheForLocalUsers
or:
    https://docs.pagure.org/SSSD.sssd/design_pages/files_provider.html

Now, even though sssd watches the passwd and group files with the help
of inotify, there can still be a small window where someone requests a
user or a group, finds that it doesn't exist, adds the entry and checks
again. Without some support in shadow-utils that would explicitly drop
the sssd caches, the inotify watch can fire a little late, so a
combination of commands like this:
    getent passwd user || useradd user; getent passwd user
can result in the second getent passwd not finding the newly added user
as the racy behaviour might still return the cached negative hit from
the first getent passwd.

This patch more or less copies the already existing support that
shadow-utils had for dropping nscd caches, except using the "sss_cache"
tool that sssd ships.
2018-09-13 14:20:02 +02:00
Serge Hallyn
6bf2d74dfc Merge pull request #122 from ivladdalvi/nologin-uid
Log UID in nologin
2018-08-13 18:37:02 -05:00
Vladimir Ivanov
4be18d3299 Log UID in nologin
Sometimes getlogin() may fail, e.g., in a chroot() environment or due to NSS
misconfiguration. Loggin UID allows for investigation and troubleshooting in
such situation.
2018-08-13 16:46:04 +08:00
Serge Hallyn
0d725c1e60 Merge pull request #116 from LionNatsu/master
po/zh_CN: update
2018-08-11 00:40:02 -05:00
Serge Hallyn
3c69af9ed3 Merge pull request #119 from mvo5/su-l
su.c: run pam_getenvlist() after setup_env
2018-08-11 00:39:07 -05:00
Michael Vogt
89b96cb85c su.c: run pam_getenvlist() after setup_env
When "su -l" is used the behaviour is described as similar to
a direct login. However login.c is doing a setup_env(pw) and then a
pam_getenvlist() in this scenario. But su.c is doing it the other
way around. Which means that the value of PATH from /etc/environment
is overriden. I think this is a bug because:

The man-page claims that "-l": "provides an environment similar
to what the user would expect had the user logged in directly."

And login.c is using the PATH from /etc/environment.

This will fix:
https://bugs.launchpad.net/ubuntu/+source/shadow/+bug/984390
2018-06-25 16:00:21 +02:00
A. Wilcox
99dbd4b9ee Support systems that only have utmpx
This allows shadow-utils to build on systems like Adélie, which have no
<utmp.h> header or `struct utmp`.  We use a <utmpx.h>-based daemon,
utmps[1], which uses `struct utmpx` only.

Tested both `login` and `logoutd` with utmps and both work correctly.

[1]: http://skarnet.org/software/utmps/
2018-06-24 00:13:12 -05:00
Serge Hallyn
67ec1a5266 Merge pull request #117 from rindeal/ENABLE_SUBIDS
fix unguarded ENABLE_SUBIDS code
2018-06-19 08:17:57 -04:00
Jan Chren (rindeal)
2fd5815546 fix unguarded ENABLE_SUBIDS code 2018-06-18 15:51:27 +02:00
Lion Yang
cba31b52b3 po/zh_CN: update 2018-06-16 18:26:28 +08:00
Serge Hallyn
eadcb472e1 Merge pull request #112 from jubalh/useradd-mkdirs
Create parent dirs for useradd -m
2018-05-23 09:57:40 -05:00
Michael Vetter
b3b6d9d77c Create parent dirs for useradd -m
Equivalent of `mkdir -p`. It will create all parent directories.
Example: `useradd -d /home2/testu1 -m testu1`

Based on https://github.com/shadow-maint/shadow/pull/2 by Thorsten Kukuk
and Thorsten Behrens which was Code from pwdutils 3.2.2 with slight adaptations.

Adapted to so it applies to current code.
2018-05-15 17:30:34 +02:00
Serge Hallyn
48dcf7852e usermod: prevent a segv
in the case where prefix does not exist.

Signed-off-by: Serge Hallyn <shallyn@cisco.com>
2018-05-08 21:37:55 -05:00
fariouche
73a876a056 Fix usermod crash
Return newly allocated pointers when the caller will free them.

Closes #110
2018-05-08 21:17:46 -05:00
Serge Hallyn
f50603a5fc release 4.6
Signed-off-by: Serge Hallyn <shallyn@cisco.com>
2018-04-29 11:41:41 -05:00
Serge Hallyn
164dcfe65b Merge pull request #103 from HarmtH/be-predictable
su.c: be more predictable
2018-03-29 23:10:51 -07:00
Serge Hallyn
fb356b1344 Merge pull request #21 from fariouche/master
Add --prefix argument
2018-03-29 22:36:28 -07:00
Serge Hallyn
a3d91ae318 Merge pull request #102 from HarmtH/fix-dashdash-slurp
su.c: fix '--' slurping
2018-03-29 15:45:54 -07:00
fariouche
65b4f58703 add --prefix option: some fixes + fixed pwd.lock file location 2018-03-28 21:14:12 +02:00
fariouche
54551c7d6e Merge remote-tracking branch 'upstream/master' 2018-03-28 21:11:36 +02:00
Harm te Hennepe
d877e3fcac su.c: be more predictable
Always parse first non-option as username.
2018-03-27 00:57:21 +02:00
Harm te Hennepe
dbfe7dd42e su.c: fix '--' slurping
All arguments are already reordered and parsed by getopt_long since e663c69, so manual '--' slurping is wrong.

Closes #101
2018-03-26 22:37:56 +02:00
Serge Hallyn
45b4187596 pwconv and grpconv: rewind after deleting an entry
Otherwise our spw_next() will cause us to skip an entry.
Ideally we'd be able to do an swp_rewind(1), but I don't
see a helper for this.

Closes #60

Signed-off-by: Serge Hallyn <shallyn@cisco.com>
2018-03-25 09:18:22 -05:00
Serge Hallyn
44c63795a7 userdel: fix wrong variable name in tcb case
Found in mandriva distro patch, and with a test build.

Signed-off-by: Serge Hallyn <shallyn@cisco.com>
2018-03-24 23:44:09 -05:00
Serge Hallyn
36244ac1ff src/Makefile.am: tcb fixes from mandriva
1. suidubins -= was breaking build with WITH_TCB.
2. stick libtcb at end of ldlibs list.

Signed-off-by: Serge Hallyn <shallyn@cisco.com>
2018-03-24 23:41:23 -05:00
Serge Hallyn
d3790feac0 pwck.c: do not pass O_CREAT
It causes a crash later when we try to close files.

Closes #96

Signed-off-by: Serge Hallyn <shallyn@cisco.com>
2018-03-24 20:29:48 -05:00
Serge Hallyn
b63aca9a2c src/Makefile.am: drop duplicate inclusion of chage
Closes #80

Signed-off-by: Serge Hallyn <shallyn@cisco.com>
2018-03-24 16:27:20 -05:00
Serge Hallyn
8f2f2a0d9d Merge pull request #98 from jsoref/spelling
Spelling
2018-03-24 15:54:51 -05:00
Serge Hallyn
5d57ca10d9 Merge pull request #100 from akrosikam/patch-1
Complete translation to Norwegian bokmål
2018-03-24 15:54:22 -05:00
akrosikam
a5913d98e1 Complete translation to Norwegian bokmål
Translate remaining strings to Norwegian bokmål (nb). Also, cure previous translation of excessive anglicism and apply a more consistent use of actual Norwegian syntax.
2018-03-12 08:39:16 +01:00
Serge Hallyn
5f3e3c2c62 Merge pull request #93 from rahul1809/master
Double freeing up pointers , Causing Segmentation fault
2018-02-19 14:45:13 -06:00
Serge Hallyn
c53e4c1d77 Merge pull request #97 from cyphar/newgidmap-secure-setgroups
newgidmap: enforce setgroups=deny if self-mapping a group
2018-02-16 08:40:39 -06:00
Aleksa Sarai
6d8be68071 README: add Aleksa Sarai to author list
Signed-off-by: Aleksa Sarai <asarai@suse.de>
2018-02-16 17:56:36 +11:00
Aleksa Sarai
fb28c99b8a newgidmap: enforce setgroups=deny if self-mapping a group
This is necessary to match the kernel-side policy of "self-mapping in a
user namespace is fine, but you cannot drop groups" -- a policy that was
created in order to stop user namespaces from allowing trivial privilege
escalation by dropping supplementary groups that were "blacklisted" from
certain paths.

This is the simplest fix for the underlying issue, and effectively makes
it so that unless a user has a valid mapping set in /etc/subgid (which
only administrators can modify) -- and they are currently trying to use
that mapping -- then /proc/$pid/setgroups will be set to deny. This
workaround is only partial, because ideally it should be possible to set
an "allow_setgroups" or "deny_setgroups" flag in /etc/subgid to allow
administrators to further restrict newgidmap(1).

We also don't write anything in the "allow" case because "allow" is the
default, and users may have already written "deny" even if they
technically are allowed to use setgroups. And we don't write anything if
the setgroups policy is already "deny".

Ref: https://bugs.launchpad.net/ubuntu/+source/shadow/+bug/1729357
Fixes: CVE-2018-7169
Reported-by: Craig Furman <craig.furman89@gmail.com>
Signed-off-by: Aleksa Sarai <asarai@suse.de>
2018-02-16 17:56:35 +11:00
fariouche
acaed3deab upstream merge 2018-01-23 23:10:19 +01:00
rahul
bb47fdf25e indentation fix 2018-01-22 17:07:27 +05:30
rahul
97bb5b2b6d added a check to avoid freeing null pointer 2018-01-22 17:05:52 +05:30
Serge Hallyn
c0f0c67864 Merge pull request #92 from IronicBadger/master
Fixes mispelling of MAX_DAYS help text
2018-01-18 22:42:12 -06:00
Alex Kretzschmar
e91b0f0517 Fixes mispelling of MAX_DAYS help text 2018-01-17 12:21:48 +00:00
Serge Hallyn
3f1f999e2d Merge pull request #90 from t8m/userdel-chroot
Make userdel to work with -R.
2018-01-08 22:57:43 -06:00
Serge Hallyn
c63bc6bfaa Merge pull request #91 from kloeri/master
Add note to passwd(1) that --maxdays -1 disables the setting.
2018-01-08 22:56:23 -06:00
Bryan Østergaard
a54907dce3 Add note to passwd(1) that --maxdays -1 disables the setting.
This note already exists in chage(1).
2018-01-03 18:36:40 +01:00
Tomas Mraz
2c57c399bf Make userdel to work with -R.
The userdel checks for users with getpwnam() which might not work
properly in chroot. Check for the user's presence in local files only.
2017-12-21 09:12:58 +01:00
Josh Soref
a063580dbb spelling: within 2017-10-22 21:37:53 +00:00
Josh Soref
a2c6e429b3 spelling: various 2017-10-22 21:33:42 +00:00
Josh Soref
f3e07f105e spelling: using 2017-10-22 21:31:09 +00:00
Josh Soref
f21700d876 spelling: username 2017-10-22 21:31:35 +00:00
Josh Soref
34669aa651 spelling: unrecognized 2017-10-22 21:30:30 +00:00
Josh Soref
08248f0859 spelling: typical 2017-10-22 21:28:58 +00:00
Josh Soref
722be83a14 spelling: thanks 2017-10-22 21:24:49 +00:00
Josh Soref
ea1a6e814b spelling: success 2017-10-22 21:23:13 +00:00
Josh Soref
2c930b19ba spelling: succeeded 2017-10-22 21:23:22 +00:00
Josh Soref
75e8eaad78 spelling: submitting 2017-10-22 21:23:03 +00:00
Josh Soref
b74d6cfb98 spelling: spotted 2017-10-22 21:16:50 +00:00
Josh Soref
a95d4ac1b5 spelling: spectacularly 2017-10-22 21:16:07 +00:00
Josh Soref
b9c9d411ff spelling: similar 2017-10-22 21:14:37 +00:00
Josh Soref
05cc753275 spelling: session 2017-10-22 21:13:32 +00:00
Josh Soref
af4a1c4e6b spelling: security 2017-10-22 21:13:23 +00:00
Josh Soref
ef39098a1b spelling: rewritten 2017-10-22 21:11:59 +00:00
Josh Soref
6671b44434 spelling: remove 2017-10-22 21:12:29 +00:00
Josh Soref
b2dbde4b8c spelling: really 2017-10-22 21:06:22 +00:00
Josh Soref
57cb36333b spelling: queried 2017-10-22 21:05:52 +00:00
Josh Soref
bfacc99ac3 spelling: provided 2017-10-22 21:04:46 +00:00
Josh Soref
e2192e119d spelling: poor 2017-10-22 21:15:45 +00:00
Josh Soref
4e0ac33eae spelling: password 2017-10-22 21:03:28 +00:00
Josh Soref
8078e5bd54 spelling: partially 2017-10-22 21:03:00 +00:00
Josh Soref
146a0da7b3 spelling: overridden 2017-10-22 21:01:25 +00:00
Josh Soref
ad7b83fc86 spelling: output 2017-10-22 21:00:52 +00:00
Josh Soref
c668c49a15 spelling: originally 2017-10-22 20:58:52 +00:00
Josh Soref
3574346318 spelling: options 2017-10-22 20:58:25 +00:00
Josh Soref
008be2848e spelling: nonexistent 2017-10-22 20:54:42 +00:00
Josh Soref
63261593c8 spelling: negative 2017-10-22 20:48:57 +00:00
Josh Soref
18b14eb4a8 spelling: necessary 2017-10-22 20:45:06 +00:00
Josh Soref
4724e503b0 spelling: multiple 2017-10-22 20:41:18 +00:00
Josh Soref
2c4d93c7cf spelling: moment 2017-10-22 20:39:14 +00:00
Josh Soref
148c1c0984 spelling: modification 2017-10-22 20:38:52 +00:00
Josh Soref
6bc784b95a spelling: missing 2017-10-22 20:37:31 +00:00
Josh Soref
d275cce099 spelling: message 2017-10-22 20:34:22 +00:00
Josh Soref
5136659a59 spelling: maximum 2017-10-22 20:33:55 +00:00
Josh Soref
414816064f spelling: match 2017-10-22 20:33:00 +00:00
Josh Soref
dcf96e43fa spelling: mapping 2017-10-22 20:32:45 +00:00
Josh Soref
ea7d7bb644 spelling: many 2017-10-22 20:30:00 +00:00
Josh Soref
60891cd197 spelling: logout 2017-10-22 20:28:57 +00:00
Josh Soref
0556fea593 spelling: locally 2017-10-22 20:28:46 +00:00
Josh Soref
74fcf6f28d spelling: interactive 2017-10-22 20:24:32 +00:00
Josh Soref
70eb03ec29 spelling: inserted 2017-10-22 20:22:44 +00:00
Josh Soref
856d26cb4b spelling: improvements 2017-10-22 20:11:27 +00:00
Josh Soref
1adf386345 spelling: if the 2017-10-22 19:47:52 +00:00
Josh Soref
02137de419 spelling: if 2017-10-22 20:52:44 +00:00
Josh Soref
73516df908 spelling: gshadow 2017-10-22 19:47:08 +00:00
Josh Soref
3025b9ebac spelling: groupmod 2017-10-22 19:33:50 +00:00
Josh Soref
e235f372ce spelling: gratuitously 2017-10-22 19:17:02 +00:00
Josh Soref
62ace035c6 spelling: getxxyyy 2017-10-22 19:16:30 +00:00
Josh Soref
07a169d964 spelling: forgotten 2017-10-22 19:13:08 +00:00
Josh Soref
8e2b91c8cc spelling: faillog 2017-10-22 19:11:52 +00:00
Josh Soref
831ff281d0 spelling: equivalent 2017-10-22 19:11:20 +00:00
Josh Soref
29ad485d17 spelling: enviroment 2017-10-22 19:10:52 +00:00
Josh Soref
51f740e23e spelling: entered 2017-10-22 19:10:41 +00:00
Josh Soref
c751f4a6ec spelling: else 2017-10-22 19:08:39 +00:00
Josh Soref
742868dc2d spelling: display its 2017-10-22 18:44:58 +00:00
Josh Soref
9b8bddd179 spelling: displaying 2017-10-22 18:43:40 +00:00
Josh Soref
1987203745 spelling: displayed 2017-10-22 18:43:48 +00:00
Josh Soref
f7abcfb39a spelling: devices 2017-10-22 18:40:47 +00:00
Josh Soref
016bc8b813 spelling: default 2017-10-22 18:34:35 +00:00
Josh Soref
66b1a59efe spelling: cumulative 2017-10-22 18:33:13 +00:00
Josh Soref
bd4750126b spelling: created 2017-10-22 08:23:57 +00:00
Josh Soref
0fba6bd347 spelling: conversation 2017-10-22 18:32:19 +00:00
Josh Soref
eb9db854d7 spelling: constraints 2017-10-22 21:07:23 +00:00
Josh Soref
7d68d59cc2 spelling: configuration 2017-10-22 18:31:51 +00:00
Josh Soref
f9311ba61d spelling: conditionally 2017-10-22 18:31:24 +00:00
Josh Soref
60d2888605 spelling: comment 2017-10-22 18:25:35 +00:00
Josh Soref
c2ada4c306 spelling: command 2017-10-22 18:25:46 +00:00
Josh Soref
310ef194a1 spelling: close 2017-10-22 18:25:14 +00:00
Josh Soref
daf30eff79 spelling: chpasswd 2017-10-22 18:23:41 +00:00
Josh Soref
a90585f1d6 spelling: checking 2017-10-22 18:22:12 +00:00
Josh Soref
4be6d423e4 spelling: changed 2017-10-22 08:24:23 +00:00
Josh Soref
2db724bc50 spelling: change 2017-10-22 08:24:59 +00:00
Josh Soref
452b9c26e4 spelling: categories 2017-10-22 08:08:07 +00:00
Josh Soref
d0c05b0143 spelling: cannot 2017-10-22 08:05:45 +00:00
Josh Soref
36aeb4e9ee spelling: built 2017-10-22 18:41:48 +00:00
Josh Soref
f8d4b66edd spelling: better 2017-10-22 08:05:08 +00:00
Josh Soref
483de7d614 spelling: beginning 2017-10-22 08:04:51 +00:00
Josh Soref
a95ed40bf0 spelling: available 2017-10-22 08:02:00 +00:00
Josh Soref
686efcfcb1 spelling: attributes 2017-10-22 07:59:41 +00:00
Josh Soref
bd6f2760a3 spelling: at the 2017-10-22 08:00:59 +00:00
Josh Soref
15631009b4 spelling: applied 2017-10-22 07:57:56 +00:00
Josh Soref
8eb822ebf3 spelling: anonymous 2017-10-22 07:56:49 +00:00
Josh Soref
aa95b1b763 spelling: always 2017-10-22 07:56:16 +00:00
Josh Soref
92e3a5e386 spelling: allowed 2017-10-22 07:56:05 +00:00
Josh Soref
4c22dcfbfd spelling: address 2017-10-22 07:55:43 +00:00
Josh Soref
4f459198db spelling: account 2017-10-22 07:52:04 +00:00
Serge Hallyn
056f7352ef Merge pull request #86 from WheresAlice/master
Make language more inclusive
2017-10-06 17:47:31 -05:00
Serge Hallyn
0c2939b331 Merge pull request #82 from t8m/ingroup
newgrp: avoid unnecessary group lookups
2017-10-06 17:45:31 -05:00
Serge Hallyn
68e3d685fd Merge pull request #84 from jubalh/mentionman
Add note about conditional man pages
2017-10-06 17:43:47 -05:00
Serge Hallyn
0209d3f185 Merge pull request #85 from jubalh/nosilent
Add warning when turning off man switch
2017-09-29 10:08:47 -05:00
Michael Vetter
ef6890c31d Add error when turning off man switch
Print a warning and abort in case xsltproc is missing.
2017-09-29 11:01:39 +02:00
WheresAlice
1e98b3b559 Make language less binary 2017-09-20 17:00:29 +01:00
Michael Vetter
223238d265 Add note about conditional man pages
Closes https://github.com/shadow-maint/shadow/issues/83
2017-09-08 22:14:17 +02:00
Tomas Mraz
33f1f69e9c newgrp: avoid unnecessary group lookups
In case a system uses remote identity server (LDAP) the group lookup
can be very slow. We avoid it when we already know the user has the
group membership.
2017-08-14 11:38:46 +02:00
Serge Hallyn
fb04f2723a nl.po: fix some missing newlines
Signed-off-by: Serge Hallyn <serge@hallyn.com>
2017-07-16 17:09:00 -05:00
Serge Hallyn
78d4265f65 Import new Dutch translations.
Thanks to Frans Spiesschaert.

Signed-off-by: Serge Hallyn <serge@hallyn.com>
2017-07-16 16:46:21 -05:00
Serge Hallyn
c2aed5345e update changelog for last commit 2017-07-10 21:52:02 -05:00
sbts
2392894eb0 add error constant names to groupmod.8.xml This assists someone wanting to work out what may have caused the error 2017-07-10 21:50:49 -05:00
sbts
59fa2c0763 implement and document additional error codes for groupmod add E_CLEANUP_SERVICE, E_PAM_USERNAME, E_PAM_ERROR to groupmod.c and groupmod.8.xml 2017-07-10 21:50:49 -05:00
Serge Hallyn
7081b2df85 Merge pull request #74 from AdamMajer/upstream
support dynamically added users via pam_group
2017-06-15 22:41:25 -05:00
Serge Hallyn
1f34221552 Merge pull request #76 from edmorley/fix-changelog-dates
Correct wrong year in ChangeLog dates
2017-06-15 22:38:01 -05:00
Ed Morley
c43681a068 Correct wrong year in ChangeLog dates
The recently added entries were actually for 2017.
2017-06-15 14:34:46 +01:00
Adam Majer
992fab50ee support dynamically added users via pam_group
Dynamically added users via pam_group are not listed in groups
databases but are still valid.
2017-05-22 13:42:35 +02:00
Serge Hallyn
15be89f89d release 4.5 2017-05-17 14:33:02 -05:00
Serge Hallyn
d2902c8d3b update Changelog 2017-05-17 14:27:48 -05:00
Serge Hallyn
8e51ec9ee4 Merge pull request #72 from stoeckmann/su-regression
Reset pid_child only if waitpid was successful.
2017-05-14 11:41:40 -05:00
Tobias Stoeckmann
7d82f203ee Reset pid_child only if waitpid was successful.
Do not reset the pid_child to 0 if the child process is still
running. This else-condition can be reached with pid being -1,
therefore explicitly test this condition.

This is a regression fix for CVE-2017-2616. If su receives a
signal like SIGTERM, it is not propagated to the child.

Reported-by: Radu Duta <raduduta@gmail.com>
Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
2017-05-14 17:58:10 +02:00
Serge Hallyn
c07711de1d Merge pull request #71 from lamby/sp_lstchg-reproducible-857803
Make the sp_lstchg shadow field reproducible.
2017-04-19 17:11:32 -05:00
Chris Lamb
cb610d54b4 Make the sp_lstchg shadow field reproducible.
The third field in the /etc/shadow file (sp_lstchg) contains the date of
the last password change expressed as the number of days since Jan 1, 1970.
As this is a relative time, creating a user today will result in:

   username:17238:0:99999:7:::

whilst creating the same user tomorrow will result in:

    username:17239:0:99999:7:::

This has an impact for the Reproducible Builds[0] project where we aim to
be independent of as many elements the build environment as possible,
including the current date.

This patch changes the behaviour to use the SOURCE_DATE_EPOCH[1]
environment variable (instead of Jan 1, 1970) if valid.

 [0] https://reproducible-builds.org/
 [1] https://reproducible-builds.org/specs/source-date-epoch/

Signed-off-by: Chris Lamb <lamby@debian.org>
2017-04-10 22:29:21 +01:00
Serge Hallyn
2f36da5201 Merge pull request #70 from t8m/master
Fix buffer overflow if NULL line is present in db.
2017-04-01 15:46:05 -05:00
Tomas Mraz
954e3d2e71 Fix buffer overflow if NULL line is present in db.
If ptr->line == NULL for an entry, the first cycle will exit,
but the second one will happily write past entries buffer.
We actually do not want to exit the first cycle prematurely
on ptr->line == NULL.
Signed-off-by: Tomas Mraz <tmraz@fedoraproject.org>
2017-03-31 16:25:06 +02:00
Serge Hallyn
830ae266c4 Merge pull request #68 from yurayko/master
updated russian translation
2017-03-27 08:24:40 -05:00
Serge Hallyn
6eae751e70 user_busy: fix missing close of subuid file on error
Closes #69

Reported-by: plenkow
Signed-off-by: Serge Hallyn <serge@hallyn.com>
2017-03-23 17:07:46 -05:00
Yuri Kozlov
f0e0c35f2b Merge branch 'master' of https://github.com/yurayko/shadow 2017-03-18 10:42:12 +03:00
Yuri Kozlov
dc8253450d updated russian translation 2017-03-18 10:41:13 +03:00
yurayko
8d28d8cca0 Update ru.po 2017-03-18 11:27:34 +04:00
yurayko
274afc2c61 Update ru.po 2017-03-18 11:17:56 +04:00
Yuri Kozlov
5717fe9ca8 updated russian translation 2017-03-05 11:17:27 +03:00
fariouche
b6b2c756c9 add --prefix option 2017-03-01 22:51:09 +01:00
Serge Hallyn
db57db52cf changelog for last commit 2017-02-23 13:44:27 -06:00
Tobias Stoeckmann
08fd4b69e8 su: properly clear child PID
If su is compiled with PAM support, it is possible for any local user
to send SIGKILL to other processes with root privileges. There are
only two conditions. First, the user must be able to perform su with
a successful login. This does NOT have to be the root user, even using
su with the same id is enough, e.g. "su $(whoami)". Second, SIGKILL
can only be sent to processes which were executed after the su process.
It is not possible to send SIGKILL to processes which were already
running. I consider this as a security vulnerability, because I was
able to write a proof of concept which unlocked a screen saver of
another user this way.
2017-02-23 09:47:29 -06:00
Serge Hallyn
24130c882d Merge pull request #67 from AdamMajer/upstream
Print error on exec failure + cosmetic changes
2017-02-21 14:37:42 -06:00
Adam Majer
759f94e17a Remove extra parenthesis 2017-02-20 14:50:30 +01:00
Adam Majer
90c0525c7e Remove unnecessary static variable usage 2017-02-20 14:48:55 +01:00
Josef Möllers
5ac4918bdd Add error handling in case exec fails
We should print error message if exec fails, for some reason.
2017-02-20 14:32:37 +01:00
Serge Hallyn
3f9af9deb9 Update changelog 2017-02-11 09:03:56 -06:00
David Michael
c6b0664f52 useradd: Read defaults after changing root directories
This reverts the behavior of "useradd --root" to using the settings
from login.defs in the target root directory, not the root of the
executed useradd command.
2017-02-11 08:59:49 -06:00
Josef Moellers
e36c0a418a Deleted a misplaced semicolon. 2017-02-11 08:55:07 -06:00
Baurzhan Muftakhidinov
efc8c61f75 Update Kazakh translation
Signed-off-by: Serge Hallyn <serge@hallyn.com>
2017-02-08 16:40:53 -06:00
Serge Hallyn
44c690cd9a Merge pull request #59 from rbalint/master
Patches from the Debian BTS
2017-02-04 20:27:17 -06:00
Serge Hallyn
f84a88a824 Update changelog 2017-01-29 14:49:03 -06:00
Bernhard Rosenkränzer
c33ceddc26 Don't crash on bogus keys in login.defs if PAM is enabled
Without this patch, PAM enabled builds crash when encountering an
invalid key in login.defs or key overrides because of array overflows

To reproduce, simply
	useradd -K Windows=broken

Signed-off-by: Bernhard Rosenkränzer <bero@lindev.ch>
Signed-off-by: Serge Hallyn <serge@hallyn.com>
2017-01-29 14:47:24 -06:00
Jakub Wilk
6a750c7a50 zh_TW.po: Remove duplicated Plural-Forms
Signed-off-by: Serge Hallyn <serge@hallyn.com>
2017-01-29 14:42:35 -06:00
Serge Hallyn
f288c4fcef Changelog for last commit 2017-01-29 14:38:44 -06:00
Tomas Mraz
ee9e506af2 Make the group and user allocation more effective.
Previously, the allocation was optimized for an outdated
deployment style (that of /etc/group alongside nss_db). The issue
here is that this results in extremely poor performance when using
SSSD, Winbind or nss_ldap.

There were actually two serious bugs here that have been addressed:

1) Running getgrent() loops won't work in most SSSD or Winbind
environments, as full group enumeration is disabled by default.
This could easily result in auto-allocating a group that was
already in use. (This might result in a security issue as well, if
the shared GID is a privileged group).

2) For system groups, the loop was always iterating through the
complete SYS_GID_MIN->SYS_GID_MAX range. On SSSD and Winbind, this
means hundreds of round-trips to LDAP (unless the GIDs were
specifically configured to be ignored by the SSSD or winbindd).
To a user with a slow connection to their LDAP server, this would
appear as if groupadd -r was hung. (Though it would eventually
complete).

This patch changes the algorithm to be more favorable for LDAP
environments, at the expense of some performance when using nss_db.
Given that the DB is a local service, this should have a negligible
effect from a user's perspective.

With the new algorithm, we simply first iterate through all entries
in the local database with gr_next(), recording the IDs that are in
use. We then start from the highest presumed-available entry and
call getgrgid() to see if it is available. We continue this until
we come to the first unused GID. We then select that and return it.

If we make it through all the remaining IDs without finding a free
one, we start over from the beginning of the range and try to find
room in one of the gaps in the range.

The patch was originally written by Stephen Gallagher and applied
identically also to the user allocation by Tomáš Mráz.

Signed-off-by: Serge Hallyn <serge@hallyn.com>
2017-01-29 14:37:21 -06:00
Lars Bahner
8a122a90fa Fix some spelling issues in the Norwegian translation 2017-01-19 18:44:54 +01:00
Thomas Blein
45f141ce69 French manpage translation 2017-01-19 17:39:42 +01:00
Holger Wansing
a9824dc6a3 Update for German man pages 2017-01-19 17:36:55 +01:00
Miroslav Kuře
84228eaeda Updated Czech translation 2017-01-19 17:26:22 +01:00
Frans Spiesschaert
c739407f92 Dutch translation update 2017-01-19 17:15:11 +01:00
Micah Anderson
578d495f91 Last bits of enabling subuids
This patch has been carried by Debian, originally
submitted to BTS in #739981
2017-01-18 18:06:05 +01:00
Simon Kainz
bdd68116b7 Typos fix in german translation of man pages
Reported to Debian BTS in #734609
2017-01-18 17:24:44 +01:00
Balint Reczey
c8508fabd0 Replace user´s -> user's to make login.def files valid ASCII instead of UTF-8
The Unicode character caused issues in LANG=C environment.
See Debian bug #850338 for details.
2017-01-18 16:54:51 +01:00
Serge Hallyn
36bc770ed4 Update changelog 2016-12-21 12:58:05 -06:00
Serge Hallyn
5701e147ef Update _COMMONIO_H and _SHADOWIO_H to drop leading underscore
Closes #23

Signed-off-by: Serge Hallyn <serge@hallyn.com>
2016-12-21 12:45:50 -06:00
Serge Hallyn
5fc99f02cf Merge pull request #58 from juiceme/master
shadow: Add auditing support to su
2016-12-21 12:41:39 -06:00
Serge Hallyn
411f540590 Fix s/from/to/ in usermod.c error message
Closes #49

Signed-off-by: Serge Hallyn <serge@hallyn.com>
2016-12-21 12:40:08 -06:00
Michael Vetter
b2bd56a012 Reset user in tallylog
The useradd application resets the user data in /var/log/faillog, if it
exists and a new user is created.

pam_tally2 is used in many distributions.

Check for /var/log/tallylog and reset the user there.

Patch was written by Josef Moellers <jmoellers@suse.de>.

https://bugzilla.suse.com/show_bug.cgi?id=980486
2016-12-21 12:36:11 -06:00
Jussi Ohenoja
a3bf32fe87 shadow: Add auditing support to su
This patch extends the auditing feature used in login to su.

Signed-off-by: Jussi Ohenoja <jussi.ohenoja@nokia.com>
2016-12-13 18:44:19 +02:00
Serge Hallyn
9e93c984f7 Merge pull request #17 from wking/includes-to-am-cppflags
*/Makefile.am: Replace INCLUDES with AM_CPPFLAGS
2016-12-07 00:01:54 -06:00
Serge Hallyn
d7ce9430ca Revert "Add files via upload"
This has caused build errors.  Please feel free to re-submit.

This reverts commit 93e3044c6d.
2016-12-06 23:31:58 -06:00
Serge Hallyn
0fb53623a5 Merge pull request #55 from glensc/travis2
enable travis integration
2016-12-06 23:27:19 -06:00
Serge Hallyn
9ad34243aa Merge pull request #52 from vapier/master
autotools refresh
2016-12-06 23:24:42 -06:00
Serge Hallyn
06f719e501 Merge pull request #53 from vapier/prototypes
include getdef.h for getdef_bool prototype
2016-12-06 23:23:17 -06:00
Elan Ruusamäe
f439149cb3 run travis 2016-12-06 01:09:17 +02:00
Mike Frysinger
32c0b283ef include getdef.h for getdef_bool prototype
Otherwise we get build warnings like:
sgroupio.c:255:6: warning: implicit declaration of function 'getdef_bool' [-Wimplicit-function-declaration]
shadowio.c:131:6: warning: implicit declaration of function 'getdef_bool' [-Wimplicit-function-declaration]
2016-12-05 17:15:29 -05:00
Mike Frysinger
6e91297fa2 enable silent build output by default
Enable the automake feature to produce silent output by default.
When compiling code, we now see things like:
$ make
  CC       addgrps.o
  CC       age.o
  CC       audit_help.o
...

This can be disabled via configure's --disable-silent-rules or
by passing V=1 to make.

Custom output (like in the man subdirs) don't (yet) respect this
feature.  More work will be needed to clean those up.
2016-12-05 16:02:55 -05:00
Mike Frysinger
752ca15da4 man: make clean-local more robust
If the subdirs aren't empty, the rmdir calls can fail.  Simplify this
code by just using `rm -rf` since that matches what we really want.
2016-12-05 16:02:19 -05:00
Mike Frysinger
e33cb8ae12 switch bz2 dist to xz
Since xz is fairly common nowadays, and is typically smaller/faster than
bzip2 for people to decompress, switch shadow over too.  We also merge
the two init locations into configure.ac to match newer autotools style.

The min automake version is bumped to 1.11 too since that's when xz was
released.
2016-12-05 15:57:34 -05:00
Mike Frysinger
10bd7bab14 ignore config.cache & dist files
config.cache is generated when running `./configure -C`.

The tarballs are generated when running `make dist`.
2016-12-05 15:48:10 -05:00
Mike Frysinger
84f0ae00d2 configure: avoid deprecated AC_INIT/AM_INIT_AUTOMAKE invocation
The autoconf/automake guys want AC_INIT to be passed the details of the
package directly rather than going through AM_INIT_AUTOMAKE.  Update them
both to use the newer style.

This also allows us to pass in contact details for the project.

We set the minimum autoconf version to 2.64 as that's the first one to
support passing the homepage URL in to AC_INIT.  That's a pretty old
release by now, so it shouldn't be a problem.
2016-12-05 15:43:20 -05:00
Serge Hallyn
e3f213305b update Changelog 2016-12-02 16:15:28 -06:00
Serge Hallyn
d886cf40ef Merge pull request #48 from t8m/fedora
Four simple patches from the Fedora package to merge
2016-12-02 16:14:24 -06:00
Serge Hallyn
d572e3b1f9 update changelog, finally 2016-12-02 13:41:49 -06:00
Serge Hallyn
816bd48c83 Merge pull request #50 from m4sk1n/master
update Polish translation
2016-11-25 11:58:14 -06:00
m4sk1n
05563a7832 Merge pull request #1 from m4sk1n/pl-translation-update
Add files via upload
2016-11-24 09:16:48 +01:00
m4sk1n
93e3044c6d Add files via upload
81% completed
2016-11-24 09:07:41 +01:00
Serge Hallyn
6825e6c90a Merge pull request #43 from Blub/suidbins-rule-fixup
buildsys: fix suidubins assignments
2016-11-18 20:13:48 -06:00
Tomas Mraz
6401c5b4ee snprintf() always terminates output with \0 2016-11-15 16:05:44 +01:00
Tomas Mraz
4471e5419d Keep the permissions of the original file when creating a backup. 2016-11-15 16:04:24 +01:00
Tomas Mraz
2b820c534d Audit the home directory ownership change. 2016-11-15 16:03:40 +01:00
Tomas Mraz
765993846d Print error message if SELinux file context manipulation fails. 2016-11-15 16:00:51 +01:00
Serge Hallyn
d9073bb033 Merge pull request #44 from evgeni/man-subuid-spelling
man: fix --{add,del}-sub{g,u}ids spelling
2016-11-09 17:05:33 -06:00
Evgeni Golov
efbff6a3d9 man: fix --{add,del}-sub{g,u}ids spelling
docs wrongly had a hyphen between sub and uids/gids
2016-11-09 22:23:18 +01:00
Wolfgang Bumiller
61abb4645c buildsys: fix suidubins assignments
These assignments were pasted as is into the Makefile and
ended up as part of a rule. (Usually the .PRECIOUS rule
which is why the build system never attempted to execute it
as commands, hiding the problem.)

Signed-off-by: Wolfgang Bumiller <wry.git@bumiller.com>
Reported-by: Rahel A <ra00177@surrey.ac.uk>
2016-11-05 16:09:07 +01:00
Serge Hallyn
11d1b661db Merge pull request #42 from jubalh/maint
Update README with current maintainer
2016-11-04 09:01:16 -05:00
Michael Vetter
b95b766bc0 Update README with current maintainer 2016-11-02 09:30:05 +01:00
Serge Hallyn
4094dc0c96 Merge pull request #41 from selkfoster/master
Remove non-POSIX option in chmod(1) used for src/Makefile.am
2016-10-19 19:29:43 -05:00
Matias A. Fonzo
b7fffe8f7e Remove non-POSIX option in chmod(1) used for src/Makefile.am 2016-10-18 15:46:27 -03:00
Trần Ngọc Quân
a87e2bcdf1 Update Vietnamese translations 2016-10-06 12:16:21 -05:00
Serge Hallyn
6564241674 Merge pull request #33 from t8m/master
Fix regression in useradd not loading defaults properly.
2016-09-21 09:12:15 -05:00
Serge Hallyn
dc5b2a2ec0 Merge pull request #36 from atsampson/master
Add missing size args to snprintf calls.
2016-09-20 08:14:28 -05:00
Adam Sampson
924cc34647 Use sizeof rather than hardcoding snprintf's size argument. 2016-09-20 08:04:14 +01:00
Tomas Mraz
507f96cdeb Fix regression in useradd not loading defaults properly.
The get_defaults() has to be called before processing the flags.

Signed-off-by: Tomáš Mráz <tmraz@fedoraproject.org>
2016-08-25 11:20:34 +02:00
W. Trevor King
c07397695a */Makefile.am: Replace INCLUDES with AM_CPPFLAGS
Catch up with Automake's [1], which was part of v1.6b, cut 2002-07-28
[2].  Avoids:

  $ autoreconf -v -f --install
  ...
  libmisc/Makefile.am:4: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS')
  ...
  src/Makefile.am:10: warning: 'INCLUDES' is the old name for 'AM_CPPFLAGS' (or '*_CPPFLAGS')
  ...

Consolidating with the earlier AM_CPPFLAGS avoids:

  $ autoreconf -v -f --install
  src/Makefile.am:72: warning: AM_CPPFLAGS multiply defined in condition TRUE ...
  src/Makefile.am:10: ... 'AM_CPPFLAGS' previously defined here
  autoreconf-2.69: Leaving directory `.'

[1]: http://git.savannah.gnu.org/cgit/automake.git/commit/?id=1415d22f6203206bc393fc4ea233123ba579222d
     Summary: automake.in (generate_makefile): Suggest using AM_CPPFLAGS instead of INCLUDES
     Date: 2002-07-09
[2]: http://git.savannah.gnu.org/cgit/automake.git/tag/?id=Release-1-6b
2016-04-29 17:30:18 -07:00
726 changed files with 22751 additions and 16183 deletions

2
.gitignore vendored
View File

@@ -18,6 +18,7 @@ Makefile.in
/aclocal.m4
/autom4te.cache
/compile
/config.cache
/config.guess
/config.h
/config.h.in
@@ -45,4 +46,5 @@ Makefile.in
/po/stamp-po
/shadow.spec
/shadow-*.tar.*
/libmisc/getdate.c

20
.travis.yml Normal file
View File

@@ -0,0 +1,20 @@
sudo: false
language: c
compiler:
- gcc
- clang
addons:
apt:
packages:
- autopoint
- xsltproc
script:
- ./autogen.sh --without-selinux --disable-man
- grep ENABLE_ config.status
- make
# vim:et:ts=2:sw=2

158
ChangeLog
View File

@@ -1,3 +1,161 @@
2019-12-01 Serge Hallyn <serge@hallyn.com>
* Release 4.8
* Initial optional bcrypt support.
* Make build/install of 'su' optional.
* Fix for vipw not resuming correctly when suspended
* Sync password field descriptions in manpages
* Check for valid shell argument in useradd
* Allow translation of new strings through POTFILES.in
* Migrate to itstool for translations
* Migrate to new SELinux api
* Support --enable-vendordir
* pwck: Only check homedir if set and not a system user
* Support nonstandard usernames
* sget{pw,gr}ent: check for data at EOL
* Add YYY-MM-DD support in chage
* Fix failing chmod calls for suidubins
* Fix --sbindir and --bindir for binary installations
* Fix LASTLOG_UID_MAX in login.defs
* Fix configure error with dash
2019-06-13 Serge Hallyn <serge@hallyn.com>
* Release 4.7
* Spawn: don't loop forever on ECHILD
* Do not fail locking if there is a stale lockfile Tomas Mraz)
* Use lckpwdf if prefix not set (Tomas Mraz)
* Build: check correct DocBook version (Jan Tojnar)
* Usermod: Print 'no changes' to stdout, not stderr (Serge Hallyn)
* Add support for btrfs subvolumes for home (Adam Majer)
* Fix chpasswd long line handling (Nathan Ruiz)
* Use secure_getenv for gettime (Chris Lamb)
* Make sp_lstchg reproducible (Chris Lamb)
* Do not crash commonio_close if db file is not open (Tomas Mraz)
* Don't flush nscd and sssd cache in read-only mode (Charlie Vuillemez)
* French manpage update (Alban VIDAL)
* Fix manpage defaults for SUB_UID/GID_COUNT (Tomas Mraz)
* Sync po files from shadow.pot (Alban VIDAL)
* Usermod: guard against unsafe chown of homedir contents (Tomas Mraz)
* Add LASTLOG_UID_MAX to login.defs (Tomas Mraz)
* new[ug]idmap file capabilities support (Giuseppe Scrivano and Christian Brauner)
* Fix segfault in useradd (Tomas Mraz)
* Coverity issues (Tomas Mraz)
* Flush sssd caches (Jakub Hrozek)
* Log UID in nologin (Vladimir Ivanov)
* run pam_getenvlist after setup_env in su.c (Michael Vogt)
* Support systems with only utmpx (A. Wilcox)
* Fix unguarded ENABLE_SUBIDS code (Jan Chren (rindeal))
* Update po/zh_CN translation (Lion Yang)
* Create parent dirs for useradd -m (Michael Vetter)
* Prevent usermod segv
* Fix usermod crash (fariouche)
2018-04-29 Serge Hallyn <serge@hallyn.com>
* Release 4.6
* Newgrp: avoid unnecessary lookups
* Make language less binary
* Add error when turning off man switch
* Spelling fixes
* Make userdel work with -R
* newgidmap: enforce setgroups=deny if self-mapping a group
* Norwegian bokmål translation
* pwck: prevent crash by not passing O_CREAT
* WITH_TCB fixes from Mandriva
* Fix pwconv and grpconv entry skips
* Fix -- slurping in su
* add --prefix option
2017-07-16 Serge Hallyn <serge@hallyn.com>
* Import new Dutch translations.
2017-07-10 Serge Hallyn <serge@hallyn.com>
* Expand error codes for groupmod.
2017-05-17 Serge Hallyn <serge@hallyn.com>
* Release 4.5
2017-05-17 Serge Hallyn <serge@hallyn.com>
* Patch from Tobias Stoeckmann fixing regression in previous CVE fix
preventing SIGTERM to su from being propagated to the job.
* Patch from Chris Lamb making sp_lstchg shadow field reproducible.
* Merge Russian translation updates from Yuri Kozlov
* Fix missing close of subuid file on error
2017-02-23 Serge Hallyn <serge@hallyn.com>
* Merge patch by Tobias Stoeckmann <tobias@stoeckmann.org> to fix
the equivalent of util-linux CVE-2017-2616.
2017-02-08 Serge Hallyn <serge@hallyn.com>
* Update Kazakh translations
* Consult configuration before calculating subuids
* Remove misplaced semicolon
2017-01-29 Serge Hallyn <serge@hallyn.com>
* Patch from Fedora to improve performance with SSSD, Winbind,
or nss_ldap. (Tomas Mraz)
* Make sure knowndef_table is NULL-terminated. (Bernhard Rosenkränzer)
2016-12-21 Serge Hallyn <serge@hallyn.com>
* Drop leading underscore from _COMMONIO_H and _SHADOWIO_H
* Fix readability in usermod error messages.
* Reset user in tallylog
* Add audit support to su
2016-12-02 Serge Hallyn <serge@hallyn.com>
* changes since 4.4
- Use sizeof rather than hardcoding snprintf args
- Fix useradd improper default loading
- Update Vietnamese translations
- Update Polish translations
- Remove non-POSIX chmod option in Makefile
- Fix suidubins assignments
- Fix --add-subuids etc spelling in manpages
- Audit homedir ownership change.
- Print error on selinux file context update failure
- Keep original file perms when creating a backup
* (henceforth we'll update Changelog with each commit
and proper credit)
2016-12-02 Serge Hallyn <serge@hallyn.com>
* Changes since 4.2.1:
- Documentation, error report and translations updates
- Replace path_max with 32
- User namespace support fixes/updates including:
- Correct sanity checks in newXidmap
- Fix building without subuid support
- Add /etc/subuid support for UID matching
- Support subuid for nonlocal users
- Default to 65536 subuid allocations
- Respect -r
- Check for range overflows
- Add tests from svn tree
- Use AC_CHECK_SIZEOF for uid_t size checks
- Accomodate missing /etc and login.defs
- Support FORCE_SHADOW
- Be more robust in hostile environment
- Allow removing a primary group
- Clear passwords on __pw_dup errors
- Memory leak fix in commonio_update and get_map_ranges
- Fix resource leak in syslog_sg
- Fix user busy error at userdel
- Support set/clear lastlog record via lastlog command
- Add --no-create-home as longopt for -M
- Fix signal races
- Reduce syslog priority of common usage events
2013-08-25 Nicolas François <nicolas.francois@centraliens.net>
* src/vipw.c: After waitpid(), use errno only if waitpid returned

View File

@@ -2,7 +2,5 @@
EXTRA_DIST = NEWS README TODO shadow.spec.in
AUTOMAKE_OPTIONS = 1.5 dist-bzip2 foreign
SUBDIRS = po man libmisc lib src \
contrib doc etc

142
NEWS
View File

@@ -654,9 +654,9 @@ shadow-4.0.18.2 -> shadow-4.1.0 09-12-2007
- Use MD5_CRYPT_ENAB, ENCRYPT_METHOD, SHA_CRYPT_MIN_ROUNDS, and
SHA_CRYPT_MAX_ROUNDS to define the default encryption algorithm for the
passwords.
- chpaswd, chgpasswd, newusers: New options -c/--crypt-method and
- chpasswd, chgpasswd, newusers: New options -c/--crypt-method and
-s/--sha-rounds to supersede the system default encryption algorithm.
- chpaswd, chgpasswd, newusers: DES is no more the default algorithm. They
- chpasswd, chgpasswd, newusers: DES is no more the default algorithm. They
will respect the system default configured in /etc/login.defs
*** documentation:
@@ -701,14 +701,14 @@ shadow-4.0.17 -> shadow-4.0.18 01-08-2006
- groupadd, groupmod, useradd, usermod: fixed UID/GID overflow (fixed
http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=198920)
- passwd, useradd, usermod: fixed inactive/mindays/warndays/maxdays overflow
(simillar to RH#198920),
- groupmems: rewrited for use PAM and getopt_long() and now it is enabled
(similar to RH#198920),
- groupmems: rewritten for use PAM and getopt_long() and now it is enabled
for build and install (patch by George Kraft <gk4@swbell.net>),
- S/Key: removed assign getpass() to libshadow_getpass() on autoconf level
(patch by Ulrich Mueller <ulm@kph.uni-mainz.de>; http://bugs.gentoo.org/139966),
- usermod: back to previous -a option semantics and clarify -a behavior
on documentation level (by Greg Schafer <gschafer@zip.com.au>),
- chsh, groupmod: rewrited for use getopt_long().
- chsh, groupmod: rewritten for use getopt_long().
- updated translations: ca, cs, da, eu, fr, gl, hu, ko, pl, pt, ru, sv, tr, uk, vi.
*** documentation:
- fr and ru man pages are up to date,
@@ -743,7 +743,7 @@ shadow-4.0.15 -> shadow-4.0.16 05-06-2006
*** general:
- userdel: better fix for old CERT VU#312962 (which was fixed in shadow 4.0.8):
fixed forgoten checking of the return value from fchown() before
fixed forgotten checking of the return value from fchown() before
proceeding with the fchmod() (based on Owl patch prepared by
Rafal Wojtczuk <nergal@owl.openwall.com>),
- userdel: use login.defs::MAIL_DIR instead hardcoded /var/mail in created
@@ -755,7 +755,7 @@ shadow-4.0.15 -> shadow-4.0.16 05-06-2006
passwords and libshadow_getpass() is used only because libc getpass()
do not handles password prompting with echo enabled,
- move login.defs::MD5_CRYPT_ENAB to non-PAM part,
- userdel: rewrited for use getopt_log(),
- userdel: rewritten for use getopt_log(),
- install default/template configuration files:
-- if shadow is configured with use PAM install /etc/pam.d/* files,
-- if shadow do not uses PAM install /etc/{limits,login.acces} files,
@@ -793,7 +793,7 @@ shadow-4.0.15 -> shadow-4.0.16 05-06-2006
- updated ru login.defs(5), passwd(1), userdel(8), usermod(8) man pages,
- pw_auth(3) man page removed (outdated),
- install limits(5), login.access(5) and porttime(5) man pages only when
shadow is builded with PAM support disabled,
shadow is built with PAM support disabled,
- passwd(1): better document how password strength is checked
(fixed http://bugs.debian.org/115380),
- usermod(8): added missing -a option description
@@ -816,7 +816,7 @@ shadow-4.0.14 -> shadow-4.0.15 13-03-2006
- login: default UMASK if not specified in login.defs is 022 (pointed by
Peter Vrabec <pvrabec@redhat.com>),
- chgpasswd: new tool (by Jonas Meurer <mejo@debian.org>),
- lastlog: print the usage and exit if an additional argument is profided to
- lastlog: print the usage and exit if an additional argument is provided to
lastlog (merge 488_laslog_verify_arguments Debian patch),
- login, newgrp, nologin, su: do not link with libselinux (merge
490_link_selinux_only_when_needed Debian patch),
@@ -830,9 +830,9 @@ shadow-4.0.14 -> shadow-4.0.15 13-03-2006
tries exceeded,
- always prints the number of tries in the syslog entry.
- add special handling for PAM_ABORT
- add an entry to failog, as when USE_PAM is not defined. (#53164)
- add an entry to faillog, as when USE_PAM is not defined. (#53164)
- changed pam_end to PAM_END. This is certainly was a mistake. PAM_END is
pam_close_seesion + pam_end. Here, the session is still not open, we
pam_close_session + pam_end. Here, the session is still not open, we
don't have to close it.
- a HAVE_PAM_FAIL_DELAY is missing,
- su: fixed pam session support (patch from Topi Miettinen; fixed #57526,
@@ -840,7 +840,7 @@ shadow-4.0.14 -> shadow-4.0.15 13-03-2006
- userdel: user's group is already removed by update_groups().
remove_group() is not needed (bug introduced in 4.0.14 on merge FC fixes).
Fixed by Nicolas François <nicolas.francois@centraliens.net>,
- useradd: allways remove group and gshadow databases lock, Fixed by Nicolas
- useradd: always remove group and gshadow databases lock, Fixed by Nicolas
François <nicolas.francois@centraliens.net>
(http://bugs.debian.org/348250)
- auditing fixes:
@@ -848,14 +848,14 @@ shadow-4.0.14 -> shadow-4.0.15 13-03-2006
added audit_logger() prototype),
- useradd: fixed excess audit_logger() argument,
- chage: added missing \n on display password status if password must be
chaged,
changed,
- useradd: fixed allow non-unique UID (http://bugs.debian.org/351281),
- variouse code cleanups for make possible compilation of shadow with -Wall
- various code cleanups for make possible compilation of shadow with -Wall
-Werror (by Alexander Gattin <xrgtn@yandex.ru>),
- su: move exit() outside libmisc/shell.c::shell() for handle shell() errors
on higher level (now is better visable where some programs exit with 126
and 127 exit codes); added new shell() parameter (char *const envp[])
which allow fix preserving enviloment in su on using -p, (patch by
which allow fix preserving enviroment in su on using -p, (patch by
Alexander Gattin <xrgtn@yandex.ru>),
- su: added handle -c,--command option for GNU su compliance (merge
437_su_-c_option Debian patch),
@@ -903,7 +903,7 @@ shadow-4.0.13 -> shadow-4.0.14 03-01-2006
- userdel: make the -f option force the removal of the user's group (even if it
is the primary group of another user)
(merge 453_userdel_-f_removes_group Debian patch),
- usermod: rewrited for use getopt_long() (Christian Perrier <bubulle@kheops.frmug.org>),
- usermod: rewritten for use getopt_long() (Christian Perrier <bubulle@kheops.frmug.org>),
- grpck: fixed segmentation fault on using -s when /etc/gshadow is empty (fix by
Tomasz Lemiech <szpajder@staszic.waw.pl>),
- passwd: remove handle -f, -g and -s options.
@@ -912,7 +912,7 @@ shadow-4.0.13 -> shadow-4.0.14 03-01-2006
Nicolas François <nicolas.francois@centraliens.net>)
- su: export $USER and $SHELL as well as $HOME (http://bugs.debian.org/11003 and
http://bugs.debian.org/11189),
- su, vipw: rewrited for use getopt_long(),
- su, vipw: rewritten for use getopt_long(),
- su: log successful/failed through syslog (http://bugs.debian.org/190215),
- updated translations: ca, cs, da, eu, fi, fr, it, pl, pt, ru, sv, tl, vi,
- new translations: gl.
@@ -946,7 +946,7 @@ shadow-4.0.12 -> shadow-4.0.13 10-10-2005
*** general:
- chage: removed duplicated pam_start(),
- chfn, chsh: finished PAM support usin pam_start() and co.,
- chfn, chsh: finished PAM support using pam_start() and co.,
- userdel: userdel should not remove the group which is primary for someone else
(fix by Nicolas François <nicolas.francois@centraliens.net>
http://bugs.debian.org/295416),
@@ -955,7 +955,7 @@ shadow-4.0.12 -> shadow-4.0.13 10-10-2005
- fixedlib/commonio.c: don't assume selinux is enabled if is_selinux_enabled()
returns -1 (merge isSelinuxEnabled FC patch by Jeremy Katz <katzj@redhat.com>),
- login, su (non-PAM case): fixed setup max address space limits (added missing break
statement in case) spoted by Lasse Collin <lasse.collin@tukaani.org>,
statement in case) spotted by Lasse Collin <lasse.collin@tukaani.org>,
- auditing support added. Patch prepared by Peter Vrabec <pvrabec@redhat.com> basing
on work by Steve Grubb from http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=159215
Now auditing support have commands: chage, gpasswd, groupadd, groupdel, groupmod,
@@ -972,12 +972,12 @@ shadow-4.0.12 -> shadow-4.0.13 10-10-2005
This will permit to adduser Debian script to detect if chage failed because the
system doesn't have shadowed passwords (fix for http://bugs.debian.org/317012),
- merge 010_more-i18ned-messages Debian patch which adds i18n support for few
more messages (orginaly patch was prepared by Guillem Jover <guillem@debian.org>),
more messages (originally patch was prepared by Guillem Jover <guillem@debian.org>),
- lastlog: added handle -b option which allow print only lastlog records older than
specified DAYS (fix by <miles@lubin.us>),
- chpasswd, gpasswd, newusers: fixed libmisc/salt.c for use login.defs::MD5_CRYPT_ENAB
only if PAM support is disabled (fix by John Gatewood Ham <zappaman@buraphalinux.org>),
- passwd: rewrited for use getopt_long(),
- passwd: rewritten for use getopt_long(),
- newgrp: when newgrp process sits between parent and child shells, it should
propagate STOPs from child to parent and CONTs from parent to child,
otherwise e.g. bash's "suspend" command won't work
@@ -987,11 +987,11 @@ shadow-4.0.12 -> shadow-4.0.13 10-10-2005
- chsh(1), groupadd(8), newusers(8), pwconv(8), useradd(8), userdel(8), usermod(8):
added missing references to /etc/login.defs and login.defs(5)
(Christian Perrier <bubulle@kheops.frmug.org>),
- passwd(5): rewrited based on work by Greg Wooledge <greg@wooledge.org>
- passwd(5): rewritten based on work by Greg Wooledge <greg@wooledge.org>
http://bugs.debian.org/328113
- login(1): added securetty(5) to SEE ALSO section
(fixed Debian bug http://bugs.debian.org/325773),
- groupadd(8), useradd(8): fix regular expression describing alloved login/group
- groupadd(8), useradd(8): fix regular expression describing allowed login/group
names (pointed by Nicolas François <nicolas.francois@centraliens.net>)
(correct is [a-z_][a-z0-9_-]*[$]),
- groupadd(8), useradd(8): documents in CAVEATS section the limitations shadow
@@ -1001,9 +1001,9 @@ shadow-4.0.12 -> shadow-4.0.13 10-10-2005
shadow-4.0.11.1 -> shadow-4.0.12 22-08-2005
*** general:
- newgrp, login: remove using login.defs::CLOSE_SESSIONS variable and allways
- newgrp, login: remove using login.defs::CLOSE_SESSIONS variable and always
close PAM session,
- fixed configure.in: realy enable shadow group support by default (pointed by
- fixed configure.in: really enable shadow group support by default (pointed by
Greg Schafer <gschafer@zip.com.au> and Peter Vrabec <pvrabec@redhat.com>),
- login.defs: removed handle QMAIL_DIR variable,
- login: allow regular user to login on read-only root file system (not only for root)
@@ -1028,9 +1028,9 @@ shadow-4.0.11.1 -> shadow-4.0.12 22-08-2005
period and permit brute-force attacks (fixed http://bugs.debian.org/288827),
- uClibc fixes (by Martin Schlemmer <azarah@nosferatu.za.org>):
added require ngettext (added [need-ngettext] to AM_GNU_GETTEXT() parameters)
and stub prototype for ngettext() in lib/prototypes.h (neccessary if shadow
and stub prototype for ngettext() in lib/prototypes.h (necessary if shadow
compiled with disabled NLS support)
- groupadd: rewrited for use getopt_long(),
- groupadd: rewritten for use getopt_long(),
- groupadd, groupdel, groupmod, userdel: do OPENLOG() before pam_start(),
- groupadd: fixed double OPENLOG(),
- removed lib/{grpack,gspack,pwpack,sppack}.c and prototypes from lib/prototypes.h
@@ -1066,7 +1066,7 @@ shadow-4.0.10 -> shadow-4.0.11 18-07-2005
- su: ignore SIGINT while authenticating. A ^C could defeat the waiting period and
permit brute-force attacks. Also ignore SIGQUIT.
Fixed: http://bugs.debian.org/52372 and http://bugs.debian.org/288827
- useradd: rewrited for use getopt_long(),
- useradd: rewritten for use getopt_long(),
- newgrp: add fix for handle splitted NIS groups: extends the functionality that,
if the requested group is given, all groups of the same GID are tested for
membership of the requesting user.
@@ -1097,7 +1097,7 @@ shadow-4.0.10 -> shadow-4.0.11 18-07-2005
- updated translations: cs, da, de, es, fi, pl, pt, ro, ru, sk.
*** documentation:
- pwck(8): document -q option (based on Debian patch for fix http://bugs.debian.org/309408)
- pwck(8): rewrited OPTIONS section and better SYNOPSIS,
- pwck(8): rewritten OPTIONS section and better SYNOPSIS,
- lastlog(8): document that lastlog is a sparse file, and don't need to be rotated
http://bugs.debian.org/219321
- login(8): better explain the respective roles of login, init and getty with regards
@@ -1111,12 +1111,12 @@ shadow-4.0.9 -> shadow-4.0.10 28-06-2005
*** general:
- mkpasswd: removed,
- userdel: now deletes user groups from /etc/gshdow as well as /etc/group.
- userdel: now deletes user groups from /etc/gshadow as well as /etc/group.
Fix by Nicolas François <nicolas.francois@centraliens.net>.
http://bugs.debian.org/99442
- usermod: when relocating a user's home directory, don't fail and remove the new
home directory if we can't remove the old home directory for some
reason; the results can be spectularly poort if, for instance, only
reason; the results can be spectacularly poor if, for instance, only
the rmdir() fails. Patch prepared by Timo Lindfors <lindi-spamtrap@newmail.com>.
http://bugs.debian.org/166369
- su: fix syslogs to be less ambiguous. Use old:new format instead of old-new
@@ -1124,7 +1124,7 @@ shadow-4.0.9 -> shadow-4.0.10 28-06-2005
http://bugs.debian.org/213592
- removed not used now libmisc/setup.c,
- login: use also UTMPX API instead UTMP on failure (login was affected for this
when shadow was builded without PAM support)
when shadow was built without PAM support)
patch by Nicolas François <nicolas.francois@centraliens.net>
- login: the PAM session needs to be closed as root, thus before change_uid()
http://bugs.debian.org/53570 http://bugs.debian.org/195048 http://bugs.debian.org/211884
@@ -1135,12 +1135,12 @@ shadow-4.0.9 -> shadow-4.0.10 28-06-2005
http://bugs.debian.org/48002
- login: fixed username on succesful login (was using the normal username,
when it should have used pam_user) http://bugs.debian.org/47819
- remove using SHADOWPWD #define so now shadow is allways builded with shadow
passwowd support,
- chage: rewrited for use getopt_long(),
- remove using SHADOWPWD #define so now shadow is always built with shadow
password support,
- chage: rewritten for use getopt_long(),
- updated translations: ca, cs, da, fi, pl, ru, zh_TW.
*** documentation:
- most of the man pages now are generated from XML files so in case submiting any
- most of the man pages now are generated from XML files so in case submitting any
chages to this resources please make diff to XML files,
- chfn: give more details about the influence of login.defs on what's allowed to
users.
@@ -1148,7 +1148,7 @@ shadow-4.0.9 -> shadow-4.0.10 28-06-2005
shadow-4.0.8 -> shadow-4.0.9 23-05-2005
*** general:
- passwd: fixed segfault in non-PAM connfiguration
- passwd: fixed segfault in non-PAM configuration
(submited by Greg Schafer <gschafer@zip.com.au>),
- newgrp: fixed NULL pointer dereference - getlogin() and ttyname() can
return NULL which is not checked (http://bugs.debian.org/162303),
@@ -1170,15 +1170,15 @@ shadow-4.0.7 -> shadow-4.0.8 26-04-2005
- configure.in: add using AC_GNU_SOURCE macro for kill compilation warnings about
implicit declaration of function `fseeko',
- faillog: changed faillog record display format for allow fit in 80 columns all
faillog atributies,
faillog attributes,
- removed NDBM code (unused),
- fixed use of SU_WHEEL_ONLY in su. Now su realy is avalaible for wheel group
- fixed use of SU_WHEEL_ONLY in su. Now su really is available for wheel group
members. Thanks to Mike Frysinger <vapier@gentoo.org> for report:
http://bugs.gentoo.org/show_bug.cgi?id=80345
- drop never finished kerberos and des_rpc support (for kerberos support back firs
must be prepared modularization),
- fixed UTMP path detection (by Kelledin <kelledin@users.sf.net>),
- useradd: rewrited group count to dynamic (by John Newbigin
- useradd: rewritten group count to dynamic (by John Newbigin
<jnewbigin@ict.swin.edu.au>),
- login: fixed create lastlog entry fo users never loged in on non-PAM
variant of login (fix by <oracular@ziplip.com>),
@@ -1193,7 +1193,7 @@ shadow-4.0.7 -> shadow-4.0.8 26-04-2005
fchmod() is executed. (Actually, we could also pass the final "mode" to
the open() call and then save the consequent fchmod().)
- SELinux changes: added changes in chage, chfn, chsh, passwd for allow
construct more grained user password/accuunt properties on SELinux
construct more grained user password/account properties on SELinux
policies level. Patch originally based on RH changes (submited by Chris
PeBenito <pebenito@gentoo.org>),
- added SELinux changes: in libmisc/copydir.c (based on Fedora patch),
@@ -1211,7 +1211,7 @@ shadow-4.0.7 -> shadow-4.0.8 26-04-2005
- newgrp(1): fix #251926, #166173, #113191 Debian bugs: explain why editing /etc/group
(without gshadow) doesn't permit to use newgrp,
- newgrp(1): newgrp uses /bin/sh (not bash),
- faillog(8): updated after rewrited faillog command for use getopt_long(),
- faillog(8): updated after rewritten faillog command for use getopt_long(),
- login(1): removed fragment about abilities pass enviroment variables in login prompt,
- gshadow(5): new file (by Nicolas Nicolas François <nicolas.francois@centraliens.net>),
- usermod(8): fixed #302388 Debian bug: added separated -o option description,
@@ -1229,24 +1229,24 @@ shadow-4.0.6 -> shadow-4.0.7 26-01-2005
-- use fseeko() instead fseek() and remove casting file offsets to unsigned
long.
- lastlog:
-- rewrited source code using the same style as in chpasswd.c,
-- open lastlog file after finish parse comman line optiomns
(now --help otput can be displayd for users without lastlog
-- rewritten source code using the same style as in chpasswd.c,
-- open lastlog file after finish parse commandline options
(now --help output can be displayed for users without lastlog
file read permission),
-- cleanups in lastlog(8) man page using the same style as in
chpasswd(8).
- chpasswd:
-- switch chpasswd to use getopt_long() and adds a --md5 option
(by Ian Gulliver <ian@penguinhosting.net>),
-- rewrited chpasswd(8) man page.
-- rewritten chpasswd(8) man page.
shadow-4.0.5 -> shadow-4.0.6 08-11-2004
- su: fixed adding of pam_env env variables to enviroment
(Martin Schlemmer <azarah@nosferatu.za.org>),
- autoconf: fixed filling MAIL_SPOOL_DIR and MAIL_SPOOL_FILE variables
which was allways empty (Gregorio Guidi <g.guidi@sns.it>),
- realuy closse security bug in libmisc/pwdcheck.c,
which was always empty (Gregorio Guidi <g.guidi@sns.it>),
- really close security bug in libmisc/pwdcheck.c,
- added missing template/example PAM service config files for chfn, chsh and
userdel,
- do not translate variable names from /etc/default/useradd during
@@ -1257,10 +1257,10 @@ shadow-4.0.4.1 -> shadow-4.0.5 27-10-2004
- change libmisc to private static library,
- added SELinux support (basing on patch from Gentoo),
- chage: more verbose/human readable -l output. This output is much more
beter for send directly via email for each users as message with account
better for send directly via email for each users as message with account
status (for example as message with warning about account/password expiration),
- login: fixed handle -f option: now it works correctly without specify "-h
<host>" if open login session localy is required (thanks for help
<host>" if open login session locally is required (thanks for help
investigate bug for Krzysztof Kotlenga),
- userdel: when removing a user with userdel, userdel was always exits with 1 (fixed).
Based on http://bugs.gentoo.org/show_bug.cgi?id=66687,
@@ -1274,7 +1274,7 @@ shadow-4.0.4.1 -> shadow-4.0.5 27-10-2004
makes httpd Option SymlinkIfOwnerMatch break for default weg pages
including symlinks placed into /etc/skel/public_html for example.
http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=66819
- su: add pam_open_session() support. If builded without PAM support
- su: add pam_open_session() support. If built without PAM support
propagate $DISPLAY and $XAUTHORITY enviroment variables.
Based on http://www.gentoo.org/cgi-bin/viewcvs.cgi/sys-apps/shadow/files/shadow-4.0.4.1-su-pam_open_session.patch?rev=1.1
- applied 036_pam_access_with_preauth.patch Debian patch submited by Bjorn
@@ -1287,11 +1287,11 @@ shadow-4.0.4.1 -> shadow-4.0.5 27-10-2004
Use constant strings rather than argv[0] for syslog ident in the user
management commands,
shadow-4.0.4.1-owl-tmp.diff:
Remove using mktemp() if mkstemp() prototype not found (use allways mkstemp()),
Remove using mktemp() if mkstemp() prototype not found (use always mkstemp()),
shadow-4.0.4.1-owl-check-reads.diff:
Add checking for read errors in commonio and vipw/vigr (not doing so could
result in data loss when the records are written back),
- fixed securirty bug in libmisc/pwdcheck.c which allow unauthorized
- fixed security bug in libmisc/pwdcheck.c which allow unauthorized
account properties modification.
Affected tools: chfn and chsh.
Bug was discovered by Martin Schulze <joey@infodrom.org>.
@@ -1307,12 +1307,12 @@ shadow-4.0.4.1 -> shadow-4.0.5 27-10-2004
shadow-4.0.4 => shadow-4.0.4.1 14-01-2004
- bug fixes in automake files for generate correct tar ball on "make dist":
added mising "EXTRA_DIST = $(man_MANS)" in man/*/Makefile.am.
added missing "EXTRA_DIST = $(man_MANS)" in man/*/Makefile.am.
shadow-4.0.3 => shadow-4.0.4 14-01-2004
*** general:
- added missing information about -f options in groupadd usage mesage
- added missing information about -f options in groupadd usage message
(document this also in man page),
- removed TCFS support (tcfs is dead),
- convert all po/*.po files to utf-8,
@@ -1320,7 +1320,7 @@ shadow-4.0.3 => shadow-4.0.4 14-01-2004
per service flushing method instead HUPing nscd process),
- removed old AUTH_METHODS dependent code,
- chage: now all code depend on SHADOWPWD. If shadow will not be configured
on autoconf level for using shadow possword chage is olny stub which
on autoconf level for using shadow password chage is olny stub which
informs "chage not configured for shadow password support."
- dpasswd: removed,
- login: remove handle login.defs::DIALUPS_CHECK_ENAB code,
@@ -1328,7 +1328,7 @@ shadow-4.0.3 => shadow-4.0.4 14-01-2004
- ALL tools, libraries: remove old SVR4, SVR4_SI86_EUA BSD_QUOTA and ATT_AGE
dependent code,
- ALL: ready for gettext 0.11.5, automake 1.7.4, autoconf 2.57,
- logoutd, userd: handle also utmpx if avalaile,
- logoutd, userd: handle also utmpx if available,
- newgrp: fix for non-PAM version
Use CLOSE_SESSIONS depending code only when USE_PAM.
The problem was reported by Mattias Webjorn Eriksson using Slackware
@@ -1356,7 +1356,7 @@ shadow-4.0.3 => shadow-4.0.4 14-01-2004
shadow-4.0.2 => shadow-4.0.3 13-03-2002
- added variouse cs, de, fr, id, it, ko man pages found mainly in national
- added various cs, de, fr, id, it, ko man pages found mainly in national
man pages translations projects (this documents are not synced with
current en version but you know .. "Documentations is lik sex. When it is
good it very very good. Whet it is bad it is better than nothing."). Any
@@ -1372,9 +1372,9 @@ shadow-4.0.2 => shadow-4.0.3 13-03-2002
shadow-4.0.1 => shadow-4.0.2 17-02-2002
- resolve many fuzzy translations also all this which may cause problems on
displaing long uid/gid,
- allow use "$" on ending in cereated by useradd usermname accounts for allow
create machine acounts for samba (thanks to Jerome Borsboom
displaying long uid/gid,
- allow use "$" on ending in created by useradd username accounts for allow
create machine accounts for samba (thanks to Jerome Borsboom
<borsboom@tch.fgg.eur.nl> for point this problem in 4.0.1),
- fix small but ugly bug in configure.in in libpam_mics library detection.
@@ -1394,7 +1394,7 @@ shadow-4.0.0 => shadow-4.0.1
as root. If root does read-only, there's no lock needed. Added missing
"#include <errno.h>" for above (me).
shadow-4.0.0-owl-warnings.diff
Olny one fix from this patch was aplayd because other was fixed few days
Olny one fix from this patch was applied because other was fixed few days
before :)
shadow-4.0.0-owl-check_names.diff
Merge only prat this patch with checking login name matching; checking
@@ -1402,7 +1402,7 @@ shadow-4.0.0 => shadow-4.0.1
probably _POSIX_LOGIN_NAME_MAX from <bits/posix1_lim.h>,
shadow-4.0.0-owl-chage-drop-priv.diff
shadow-4.0.0-owl-pam-auth.diff
Merge part with reorder initialize PAM and checkin is chage is runed by
Merge part with reorder initialize PAM and checking if chage is runed by
root or not - now chage can be runed from non-root account for checking
by user own account information (if PAM enabled).
- fixes for handle/print correctly 32bit uid/gid (Thorsten Kukuk <kukuk@suse.de>),
@@ -1446,30 +1446,30 @@ shadow-20001016 => shadow-4.0.0 06-01-2002
- much better automake support,
- added pt_BR man pages for gpasswd(1), groupadd(8), groupdel(8),
groupmod(8), shadow(5) (man pages for other nations also are welcome),
- mamny small fixes and updates nad improvements in man pages,
- aplayed Debian patch to man pages for shadowconfig,
- many small fixes and updates nad improvements in man pages,
- applied Debian patch to man pages for shadowconfig,
- remove limit to 6 chars logged tty name (012_libmisc_sulog.c.diff Debian
patch).
shadow-20001012 -> shadow-20001016:
- conditionaly disabled body reload_nscd() because not every
- conditionally disabled body reload_nscd() because not every
version of nscd can handle it (this can be enabled by define
ENABLE_NSCD_SIGHUP) (Marek Michałkiewicz <marekm@linux.org.pl>)
- fixes on autoconf/automake level for dist target,
- Julianne F. Haugh new contact adress.
- Julianne F. Haugh new contact address.
shadow-20000902 => shadow-20001012
- removed /redhat directory with obsoleted files (partialy rewrited spec
- removed /redhat directory with obsoleted files (partially rewritten spec
file is now in root directory),
- aplayed shadow-19990827-group.patch patch from RH wich prevents adduser
- applied shadow-19990827-group.patch patch from RH wich prevents adduser
overwrite previously existing groups in adduser,
- added PAM support for chage (bind to "chage" PAM config file) also
added PAM support for all other small tools like chpasswd, groupadd,
groupdel, groupmod, newusers, useradd, userdel, usermod (bind to common
"shadow" PAM config file) - this modificaytions mainly based on
"shadow" PAM config file) - this modifications mainly based on
modifications prepared by Janek Rękojarski <baggins@pld.org.pl>,
- many small fixes and improvments in automake (mow "make dist"
- many small fixes and improvements in automake (mow "make dist"
works correctly),
- added cs translation (Jiri Pavlovsky <Jiri.Pavlovsky@ff.cuni.cz>).

22
README
View File

@@ -2,18 +2,13 @@ Shadow SITES
============
Homepage
http://pkg-shadow.alioth.debian.org/
http://github.com/shadow-maint/shadow
FTP site
ftp://pkg-shadow.alioth.debian.org/pub/pkg-shadow
Issue tracker
http://github.com/shadow-maint/shadow/issues
SVN repository
anonymous read only access: svn://svn.debian.org/pkg-shadow/upstream
SVN web interface
http://svn.debian.org/wsvn/pkg-shadow/upstream
or
http://svn.debian.org/viewsvn/pkg-shadow/upstream
Releases
https://github.com/shadow-maint/shadow/releases
Mailing lists
for general discuss: pkg-shadow-devel@lists.alioth.debian.org
@@ -44,6 +39,7 @@ a lot of mail...
Adam Rudnicki <adam@v-lo.krakow.pl>
Alan Curry <pacman@tardis.mars.net>
Aleksa Sarai <cyphar@cyphar.com>
Alexander O. Yuriev <alex@bach.cis.temple.edu>
Algis Rudys <arudys@rice.edu>
Andreas Jaeger <aj@arthur.rhein-neckar.de>
@@ -55,6 +51,7 @@ Brian R. Gaeke <brg@dgate.org>
Calle Karlsson <ckn@kash.se>
Chip Rosenthal <chip@unicom.com>
Chris Evans <lady0110@sable.ox.ac.uk>
Chris Lamb <chris@chris-lamb.co.uk>
Cristian Gafton <gafton@sorosis.ro>
Dan Walsh <dwalsh@redhat.com>
Darcy Boese <possum@chardonnay.niagara.com>
@@ -62,6 +59,7 @@ Dave Hagewood <admin@arrowweb.com>
David A. Holland <dholland@hcs.harvard.edu>
David Frey <David.Frey@lugs.ch>
Ed Carp <ecarp@netcom.com>
Eric W. Biederman" <ebiederm@xmission.com>
Floody <flood@evcom.net>
Frank Denis <j@4u.net>
George Kraft IV <gk4@us.ibm.com>
@@ -117,5 +115,7 @@ Maintainers
===========
Tomasz Kłoczko <kloczek@pld.org.pl> (2000-2007)
Nicolas François <nicolas.francois@centraliens.net> (2007-now)
Nicolas François <nicolas.francois@centraliens.net> (2007-2014)
Serge E. Hallyn <serge@hallyn.com> (2014-now)
Christian Brauner <christian@brauner.io> (2019-now)

View File

@@ -1,6 +1,9 @@
dnl Process this file with autoconf to produce a configure script.
AC_INIT
AM_INIT_AUTOMAKE(shadow, 4.4)
AC_PREREQ([2.64])
AC_INIT([shadow], [4.8], [pkg-shadow-devel@lists.alioth.debian.org], [],
[https://github.com/shadow-maint/shadow])
AM_INIT_AUTOMAKE([1.11 foreign dist-xz])
AM_SILENT_RULES([yes])
AC_CONFIG_HEADERS([config.h])
dnl Some hacks...
@@ -31,7 +34,7 @@ AC_HEADER_STDBOOL
AC_CHECK_HEADERS(errno.h fcntl.h limits.h unistd.h sys/time.h utmp.h \
utmpx.h termios.h termio.h sgtty.h sys/ioctl.h syslog.h paths.h \
utime.h ulimit.h sys/resource.h gshadow.h lastlog.h \
utime.h ulimit.h sys/capability.h sys/resource.h gshadow.h lastlog.h \
locale.h rpc/key_prot.h netdb.h acl/libacl.h attr/libattr.h \
attr/error_context.h)
@@ -71,12 +74,6 @@ AC_CHECK_MEMBERS([struct utmp.ut_type,
struct utmp.ut_time,
struct utmp.ut_xtime,
struct utmp.ut_tv],,,[[#include <utmp.h>]])
dnl There are dependencies:
dnl If UTMPX has to be used, the utmp structure shall have a ut_id field.
if test "$ac_cv_header_utmpx_h" = "yes" &&
test "$ac_cv_member_struct_utmp_ut_id" != "yes"; then
AC_MSG_ERROR(Systems with UTMPX and no ut_id field in the utmp structure are not supported)
fi
AC_CHECK_MEMBERS([struct utmpx.ut_name,
struct utmpx.ut_host,
@@ -113,6 +110,9 @@ AC_REPLACE_FUNCS(sgetgrent sgetpwent sgetspent)
AC_REPLACE_FUNCS(snprintf strcasecmp strdup strerror strstr)
AC_CHECK_FUNC(setpgrp)
AC_CHECK_FUNC(secure_getenv, [AC_DEFINE(HAS_SECURE_GETENV,
1,
[Defined to 1 if you have the declaration of 'secure_getenv'])])
if test "$ac_cv_header_shadow_h" = "yes"; then
AC_CACHE_CHECK(for working shadow group support,
@@ -247,12 +247,15 @@ AC_ARG_ENABLE(subordinate-ids,
[enable_subids="maybe"]
)
AC_ARG_WITH(audit,
AC_ARG_WITH(audit,
[AC_HELP_STRING([--with-audit], [use auditing support @<:@default=yes if found@:>@])],
[with_audit=$withval], [with_audit=maybe])
AC_ARG_WITH(libpam,
[AC_HELP_STRING([--with-libpam], [use libpam for PAM support @<:@default=yes if found@:>@])],
[with_libpam=$withval], [with_libpam=maybe])
AC_ARG_WITH(btrfs,
[AC_HELP_STRING([--with-btrfs], [add BtrFS support @<:@default=yes if found@:>@])],
[with_btrfs=$withval], [with_btrfs=maybe])
AC_ARG_WITH(selinux,
[AC_HELP_STRING([--with-selinux], [use SELinux support @<:@default=yes if found@:>@])],
[with_selinux=$withval], [with_selinux=maybe])
@@ -274,12 +277,21 @@ AC_ARG_WITH(libcrack,
AC_ARG_WITH(sha-crypt,
[AC_HELP_STRING([--with-sha-crypt], [allow the SHA256 and SHA512 password encryption algorithms @<:@default=yes@:>@])],
[with_sha_crypt=$withval], [with_sha_crypt=yes])
AC_ARG_WITH(bcrypt,
[AC_HELP_STRING([--with-bcrypt], [allow the bcrypt password encryption algorithm @<:@default=no@:>@])],
[with_bcrypt=$withval], [with_bcrypt=no])
AC_ARG_WITH(nscd,
[AC_HELP_STRING([--with-nscd], [enable support for nscd @<:@default=yes@:>@])],
[with_nscd=$withval], [with_nscd=yes])
AC_ARG_WITH(sssd,
[AC_HELP_STRING([--with-sssd], [enable support for flushing sssd caches @<:@default=yes@:>@])],
[with_sssd=$withval], [with_sssd=yes])
AC_ARG_WITH(group-name-max-length,
[AC_HELP_STRING([--with-group-name-max-length], [set max group name length @<:@default=16@:>@])],
[with_group_name_max_length=$withval], [with_group_name_max_length=yes])
AC_ARG_WITH(su,
[AC_HELP_STRING([--with-su], [build and install su program and man page @<:@default=yes@:>@])],
[with_su=$withval], [with_su=yes])
if test "$with_group_name_max_length" = "no" ; then
with_group_name_max_length=0
@@ -295,12 +307,26 @@ if test "$with_sha_crypt" = "yes"; then
AC_DEFINE(USE_SHA_CRYPT, 1, [Define to allow the SHA256 and SHA512 password encryption algorithms])
fi
AM_CONDITIONAL(USE_BCRYPT, test "x$with_bcrypt" = "xyes")
if test "$with_bcrypt" = "yes"; then
AC_DEFINE(USE_BCRYPT, 1, [Define to allow the bcrypt password encryption algorithm])
fi
if test "$with_nscd" = "yes"; then
AC_CHECK_FUNC(posix_spawn,
[AC_DEFINE(USE_NSCD, 1, [Define to support flushing of nscd caches])],
[AC_MSG_ERROR([posix_spawn is needed for nscd support])])
fi
if test "$with_sssd" = "yes"; then
AC_CHECK_FUNC(posix_spawn,
[AC_DEFINE(USE_SSSD, 1, [Define to support flushing of sssd caches])],
[AC_MSG_ERROR([posix_spawn is needed for sssd support])])
fi
AS_IF([test "$with_su" != "no"], AC_DEFINE(WITH_SU, 1, [Build with su])])
AM_CONDITIONAL([WITH_SU], [test "x$with_su" != "xno"])
dnl Check for some functions in libc first, only if not found check for
dnl other libraries. This should prevent linking libnsl if not really
dnl needed (Linux glibc, Irix), but still link it if needed (Solaris).
@@ -309,6 +335,17 @@ AC_SEARCH_LIBS(inet_ntoa, inet)
AC_SEARCH_LIBS(socket, socket)
AC_SEARCH_LIBS(gethostbyname, nsl)
AC_CHECK_LIB([econf],[econf_readDirs],[LIBECONF="-leconf"],[LIBECONF=""])
if test -n "$LIBECONF"; then
ECONF_CPPFLAGS="-DUSE_ECONF=1"
AC_ARG_ENABLE([vendordir],
AS_HELP_STRING([--enable-vendordir=DIR], [Directory for distribution provided configuration files]),,[])
fi
AC_SUBST(ECONF_CPPFLAGS)
AC_SUBST(LIBECONF)
AC_SUBST([VENDORDIR], [$enable_vendordir])
AM_CONDITIONAL([HAVE_VENDORDIR], [test "x$enable_vendordir" != x])
if test "$enable_shadowgrp" = "yes"; then
AC_DEFINE(SHADOWGRP, 1, [Define to support the shadow group file.])
fi
@@ -321,11 +358,12 @@ if test "$enable_man" = "yes"; then
AC_PATH_PROG([XSLTPROC], [xsltproc])
if test -z "$XSLTPROC"; then
enable_man=no
AC_MSG_ERROR([xsltproc is missing.])
fi
dnl check for DocBook DTD and stylesheets in the local catalog.
JH_CHECK_XML_CATALOG([-//OASIS//DTD DocBook XML V4.1.2//EN],
[DocBook XML DTD V4.1.2], [], enable_man=no)
JH_CHECK_XML_CATALOG([-//OASIS//DTD DocBook XML V4.5//EN],
[DocBook XML DTD V4.5], [], enable_man=no)
JH_CHECK_XML_CATALOG([http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl],
[DocBook XSL Stylesheets >= 1.70.1], [], enable_man=no)
fi
@@ -449,6 +487,20 @@ if test "$with_libcrack" = "yes"; then
AC_DEFINE(HAVE_LIBCRACK_PW, 1, [Defined if it includes *Pw functions.]))
fi
if test "$with_btrfs" != "no"; then
AC_CHECK_HEADERS([sys/statfs.h linux/magic.h linux/btrfs_tree.h], \
[btrfs_headers="yes"], [btrfs_headers="no"])
if test "$btrfs_headers$with_btrfs" = "noyes" ; then
AC_MSG_ERROR([One of sys/statfs.h linux/magic.h linux/btrfs_tree.h is missing])
fi
if test "$btrfs_headers" = "yes" ; then
AC_DEFINE(WITH_BTRFS, 1, [Build shadow with BtrFS support])
with_btrfs="yes"
fi
fi
AM_CONDITIONAL(WITH_BTRFS, test x$with_btrfs = xyes)
AC_SUBST(LIBSELINUX)
AC_SUBST(LIBSEMANAGE)
if test "$with_selinux" != "no"; then
@@ -473,7 +525,7 @@ if test "$with_selinux" != "no"; then
AC_MSG_ERROR([libsemanage not found])
fi
if test "$selinux_lib$semanage_lib" == "yesyes" ; then
if test "$selinux_lib$semanage_lib" = "yesyes" ; then
AC_DEFINE(WITH_SELINUX, 1,
[Build shadow with SELinux support])
LIBSELINUX="-lselinux"
@@ -563,7 +615,7 @@ if test "$with_libpam" = "yes"; then
LIBS=$save_libs
AC_DEFINE(USE_PAM, 1, [Define to support Pluggable Authentication Modules])
AC_DEFINE_UNQUOTED(SHADOW_PAM_CONVERSATION, [$pam_conv_function],[PAM converstation to use])
AC_DEFINE_UNQUOTED(SHADOW_PAM_CONVERSATION, [$pam_conv_function],[PAM conversation to use])
AM_CONDITIONAL(USE_PAM, [true])
AC_MSG_CHECKING(use login and su access checking if PAM not used)
@@ -593,6 +645,19 @@ if test "$enable_acct_tools_setuid" != "no"; then
fi
AM_CONDITIONAL(ACCT_TOOLS_SETUID, test "x$enable_acct_tools_setuid" = "xyes")
AC_ARG_WITH(fcaps,
[AC_HELP_STRING([--with-fcaps], [use file capabilities instead of suid binaries for newuidmap/newgidmap @<:@default=no@:>@])],
[with_fcaps=$withval], [with_fcaps=no])
AM_CONDITIONAL(FCAPS, test "x$with_fcaps" = "xyes")
if test "x$with_fcaps" = "xyes"; then
AC_CHECK_PROGS(capcmd, "setcap")
if test "x$capcmd" = "x" ; then
AC_MSG_ERROR([setcap command not available])
fi
fi
AC_SUBST(LIBSKEY)
AC_SUBST(LIBMD)
if test "$with_skey" = "yes"; then
@@ -668,12 +733,17 @@ if test "$with_libpam" = "yes"; then
echo " suid account management tools: $enable_acct_tools_setuid"
fi
echo " SELinux support: $with_selinux"
echo " BtrFS support: $with_btrfs"
echo " ACL support: $with_acl"
echo " Extended Attributes support: $with_attr"
echo " tcb support (incomplete): $with_tcb"
echo " shadow group support: $enable_shadowgrp"
echo " S/Key support: $with_skey"
echo " SHA passwords encryption: $with_sha_crypt"
echo " bcrypt passwords encryption: $with_bcrypt"
echo " nscd support: $with_nscd"
echo " sssd support: $with_sssd"
echo " subordinate IDs support: $enable_subids"
echo " use file caps: $with_fcaps"
echo " install su: $with_su"
echo

View File

@@ -20,7 +20,7 @@
** 1/28/95
** shadow-adduser 1.3:
**
** Basically a bug-fix on my additions in 1.2. Thanx to Terry Stewart
** Basically a bug-fix on my additions in 1.2. Thanks to Terry Stewart
** (stew@texas.net) for pointing out one of the many idiotic bugs I introduced.
** It was such a stupid bug that I would have never seen it myself.
**

View File

@@ -34,7 +34,7 @@
** 1/28/95
** shadow-adduser 1.3:
**
** Basically a bug-fix on my additions in 1.2. Thanx to Terry Stewart
** Basically a bug-fix on my additions in 1.2. Thanks to Terry Stewart
** (stew@texas.net) for pointing out one of the many idiotic bugs I introduced.
** It was such a stupid bug that I would have never seen it myself.
**

View File

@@ -32,7 +32,7 @@ def_home_dir=/home/users
# default shell
def_shell=/bin/tcsh
# Defaul expiration date (mm/dd/yy)
# Default expiration date (mm/dd/yy)
def_expire=""
# default dates

View File

@@ -480,7 +480,7 @@ X.B groupmems
\fB-D\fR |
[\fB-g\fI group_name \fR]
X.SH DESCRIPTION
The \fBgroupmems\fR utility allows a user to administer his/her own
The \fBgroupmems\fR utility allows a user to administer their own
group membership list without the requirement of superuser privileges.
The \fBgroupmems\fR utility is for systems that configure its users to
be in their own name sake primary group (i.e., guest / guest).

View File

@@ -2,7 +2,7 @@ Hello Marek,
I have created a diffile against the 980403 release that adds
functionality to newusers for automatic handling of users with only
anonomous ftp login (using the guestgroup feature in ftpaccess, which
anonymous ftp login (using the guestgroup feature in ftpaccess, which
means that the users home directory looks like '/home/user/./'). It also
adds a commandline argument to specify an initial directory structure
for such users, with a tarball normally containing the bin,lib,etc

View File

@@ -15,7 +15,7 @@ Changes:
- code merged into lmain.c --cristiang
TODO: - support groups in the limits file
(only usernames are supported at this momment :-( )
(only usernames are supported at this moment :-( )
Setting user limits for shadow login program

15
docs/index.html Normal file
View File

@@ -0,0 +1,15 @@
<HEAD>
<title>shadow - Welcome</title>
</head>
<body>
<h2> Welcome!</h2>
<p> This is the shadow tool suite home page. </p>
<p>
You can find releases <a href="https://github.com/shadow-maint/shadow/releases">here</a>.
</p>
<p>
Raise issues, request features, and report bugs <a href="https://github.com/shadow-maint/shadow/issues">here</a>.
</p>
</body>

View File

@@ -31,6 +31,15 @@ LOG_OK_LOGINS no
#
LASTLOG_ENAB yes
#
# Limit the highest user ID number for which the lastlog entries should
# be updated.
#
# No LASTLOG_UID_MAX means that there is no user ID limit for writing
# lastlog entries.
#
#LASTLOG_UID_MAX
#
# Enable checking and display of mailbox status upon login.
#
@@ -189,7 +198,7 @@ KILLCHAR 025
# home directories.
# 022 is the default value, but 027, or even 077, could be considered
# for increased privacy. There is no One True Answer here: each sysadmin
# must make up his/her mind.
# must make up their mind.
UMASK 022
#
@@ -311,6 +320,7 @@ CHFN_RESTRICT rwh
# If set to MD5, MD5-based algorithm will be used for encrypting password
# If set to SHA256, SHA256-based algorithm will be used for encrypting password
# If set to SHA512, SHA512-based algorithm will be used for encrypting password
# If set to BCRYPT, BCRYPT-based algorithm will be used for encrypting password
# If set to DES, DES-based algorithm will be used for encrypting password (default)
# Overrides the MD5_CRYPT_ENAB option
#
@@ -332,8 +342,23 @@ CHFN_RESTRICT rwh
# If only one of the MIN or MAX values is set, then this value will be used.
# If MIN > MAX, the highest value will be used.
#
# SHA_CRYPT_MIN_ROUNDS 5000
# SHA_CRYPT_MAX_ROUNDS 5000
#SHA_CRYPT_MIN_ROUNDS 5000
#SHA_CRYPT_MAX_ROUNDS 5000
#
# Only works if ENCRYPT_METHOD is set to BCRYPT.
#
# Define the number of BCRYPT rounds.
# With a lot of rounds, it is more difficult to brute-force the password.
# However, more CPU resources will be needed to authenticate users if
# this value is increased.
#
# If not specified, 13 rounds will be attempted.
# If only one of the MIN or MAX values is set, then this value will be used.
# If MIN > MAX, the highest value will be used.
#
#BCRYPT_MIN_ROUNDS 13
#BCRYPT_MAX_ROUNDS 13
#
# List of groups to add to the user's supplementary group set

View File

@@ -6,8 +6,7 @@ pamd_files = \
chsh \
groupmems \
login \
passwd \
su
passwd
pamd_acct_tools_files = \
chage \
@@ -29,4 +28,8 @@ pamd_DATA += $(pamd_acct_tools_files)
endif
endif
if WITH_SU
pamd_files += su
endif
EXTRA_DIST = $(pamd_files) $(pamd_acct_tools_files)

View File

@@ -6,6 +6,10 @@ DEFS =
noinst_LTLIBRARIES = libshadow.la
libshadow_la_LDFLAGS = -version-info 0:0:0
libshadow_la_CPPFLAGS = $(ECONF_CPPFLAGS)
if HAVE_VENDORDIR
libshadow_la_CPPFLAGS += -DVENDORDIR=\"$(VENDORDIR)\"
endif
libshadow_la_SOURCES = \
commonio.c \
@@ -30,6 +34,8 @@ libshadow_la_SOURCES = \
lockpw.c \
nscd.c \
nscd.h \
sssd.c \
sssd.h \
pam_defs.h \
port.c \
port.h \

View File

@@ -45,6 +45,7 @@
#include <stdio.h>
#include <signal.h>
#include "nscd.h"
#include "sssd.h"
#ifdef WITH_TCB
#include <tcb.h>
#endif /* WITH_TCB */
@@ -140,7 +141,7 @@ static int do_lock_file (const char *file, const char *lock, bool log)
int retval;
char buf[32];
fd = open (file, O_CREAT | O_EXCL | O_WRONLY, 0600);
fd = open (file, O_CREAT | O_TRUNC | O_WRONLY, 0600);
if (-1 == fd) {
if (log) {
(void) fprintf (stderr,
@@ -301,15 +302,12 @@ static int create_backup (const char *backup, FILE * fp)
struct utimbuf ub;
FILE *bkfp;
int c;
mode_t mask;
if (fstat (fileno (fp), &sb) != 0) {
return -1;
}
mask = umask (077);
bkfp = fopen (backup, "w");
(void) umask (mask);
bkfp = fopen_set_perms (backup, "w", &sb);
if (NULL == bkfp) {
return -1;
}
@@ -366,6 +364,7 @@ static void free_linked_list (struct commonio_db *db)
int commonio_setname (struct commonio_db *db, const char *name)
{
snprintf (db->filename, sizeof (db->filename), "%s", name);
db->setname = true;
return 1;
}
@@ -378,57 +377,77 @@ bool commonio_present (const struct commonio_db *db)
int commonio_lock_nowait (struct commonio_db *db, bool log)
{
char file[1024];
char lock[1024];
char* file = NULL;
char* lock = NULL;
size_t lock_file_len;
size_t file_len;
int err = 0;
if (db->locked) {
return 1;
}
snprintf (file, sizeof file, "%s.%lu",
file_len = strlen(db->filename) + 11;/* %lu max size */
lock_file_len = strlen(db->filename) + 6; /* sizeof ".lock" */
file = (char*)malloc(file_len);
if(file == NULL) {
goto cleanup_ENOMEM;
}
lock = (char*)malloc(lock_file_len);
if(lock == NULL) {
goto cleanup_ENOMEM;
}
snprintf (file, file_len, "%s.%lu",
db->filename, (unsigned long) getpid ());
snprintf (lock, sizeof lock, "%s.lock", db->filename);
snprintf (lock, lock_file_len, "%s.lock", db->filename);
if (do_lock_file (file, lock, log) != 0) {
db->locked = true;
lock_count++;
return 1;
err = 1;
}
return 0;
cleanup_ENOMEM:
if(file)
free(file);
if(lock)
free(lock);
return err;
}
int commonio_lock (struct commonio_db *db)
{
int i;
#ifdef HAVE_LCKPWDF
/*
* only if the system libc has a real lckpwdf() - the one from
* Only if the system libc has a real lckpwdf() - the one from
* lockpw.c calls us and would cause infinite recursion!
* It is also not used with the prefix option.
*/
/*
* Call lckpwdf() on the first lock.
* If it succeeds, call *_lock() only once
* (no retries, it should always succeed).
*/
if (0 == lock_count) {
if (lckpwdf () == -1) {
if (geteuid () != 0) {
(void) fprintf (stderr,
"%s: Permission denied.\n",
Prog);
if (!db->setname) {
/*
* Call lckpwdf() on the first lock.
* If it succeeds, call *_lock() only once
* (no retries, it should always succeed).
*/
if (0 == lock_count) {
if (lckpwdf () == -1) {
if (geteuid () != 0) {
(void) fprintf (stderr,
"%s: Permission denied.\n",
Prog);
}
return 0; /* failure */
}
return 0; /* failure */
}
}
if (commonio_lock_nowait (db, true) != 0) {
return 1; /* success */
}
if (commonio_lock_nowait (db, true) != 0) {
return 1; /* success */
}
ulckpwdf ();
return 0; /* failure */
#else /* !HAVE_LCKPWDF */
int i;
ulckpwdf ();
return 0; /* failure */
}
#endif /* !HAVE_LCKPWDF */
/*
* lckpwdf() not used - do it the old way.
@@ -455,7 +474,6 @@ int commonio_lock (struct commonio_db *db)
}
}
return 0; /* failure */
#endif /* !HAVE_LCKPWDF */
}
static void dec_lock_count (void)
@@ -468,6 +486,7 @@ static void dec_lock_count (void)
if (nscd_need_reload) {
nscd_flush_cache ("passwd");
nscd_flush_cache ("group");
sssd_flush_cache (SSSD_DB_PASSWD | SSSD_DB_GROUP);
nscd_need_reload = false;
}
#ifdef HAVE_LCKPWDF
@@ -754,16 +773,16 @@ commonio_sort (struct commonio_db *db, int (*cmp) (const void *, const void *))
for (ptr = db->head;
(NULL != ptr)
#if KEEP_NIS_AT_END
&& (NULL != ptr->line)
&& ( ('+' != ptr->line[0])
&& ('-' != ptr->line[0]))
&& ((NULL == ptr->line)
|| (('+' != ptr->line[0])
&& ('-' != ptr->line[0])))
#endif
;
ptr = ptr->next) {
n++;
}
#if KEEP_NIS_AT_END
if ((NULL != ptr) && (NULL != ptr->line)) {
if (NULL != ptr) {
nis = ptr;
}
#endif
@@ -908,7 +927,6 @@ static int write_all (const struct commonio_db *db)
int commonio_close (struct commonio_db *db)
/*@requires notnull db->fp@*/
{
char buf[1024];
int errors = 0;
@@ -921,8 +939,10 @@ int commonio_close (struct commonio_db *db)
db->isopen = false;
if (!db->changed || db->readonly) {
(void) fclose (db->fp);
db->fp = NULL;
if (NULL != db->fp) {
(void) fclose (db->fp);
db->fp = NULL;
}
goto success;
}

View File

@@ -31,8 +31,8 @@
*/
/* $Id$ */
#ifndef _COMMONIO_H
#define _COMMONIO_H
#ifndef COMMONIO_H
#define COMMONIO_H
#ifdef WITH_SELINUX
#include <selinux/selinux.h>
@@ -143,6 +143,7 @@ struct commonio_db {
bool isopen:1;
bool locked:1;
bool readonly:1;
bool setname:1;
};
extern int commonio_setname (struct commonio_db *, const char *);

View File

@@ -24,7 +24,7 @@ typedef unsigned char _Bool;
/* Take care of NLS matters. */
#ifdef S_SPLINT_S
extern char *setlocale(int categorie, const char *locale);
extern char *setlocale(int categories, const char *locale);
# define LC_ALL (6)
extern char * bindtextdomain (const char * domainname, const char * dirname);
extern char * textdomain (const char * domainname);
@@ -382,4 +382,10 @@ extern char *strerror ();
# endif
#endif
#ifdef HAVE_SECURE_GETENV
# define shadow_getenv(name) secure_getenv(name)
# else
# define shadow_getenv(name) getenv(name)
#endif
#endif /* _DEFINES_H_ */

View File

@@ -65,6 +65,9 @@
case '1':
method = "MD5";
break;
case '2':
method = "BCRYPT";
break;
case '5':
method = "SHA256";
break;

View File

@@ -40,6 +40,9 @@
#include <stdlib.h>
#include <ctype.h>
#include <errno.h>
#ifdef USE_ECONF
#include <libeconf.h>
#endif
#include "getdef.h"
/*
* A configuration item definition.
@@ -92,6 +95,7 @@ static struct itemdef def_table[] = {
{"GID_MIN", NULL},
{"HUSHLOGIN_FILE", NULL},
{"KILLCHAR", NULL},
{"LASTLOG_UID_MAX", NULL},
{"LOGIN_RETRIES", NULL},
{"LOGIN_TIMEOUT", NULL},
{"LOG_OK_LOGINS", NULL},
@@ -106,6 +110,10 @@ static struct itemdef def_table[] = {
#ifdef USE_SHA_CRYPT
{"SHA_CRYPT_MAX_ROUNDS", NULL},
{"SHA_CRYPT_MIN_ROUNDS", NULL},
#endif
#ifdef USE_BCRYPT
{"BCRYPT_MAX_ROUNDS", NULL},
{"BCRYPT_MIN_ROUNDS", NULL},
#endif
{"SUB_GID_COUNT", NULL},
{"SUB_GID_MAX", NULL},
@@ -148,13 +156,23 @@ static struct itemdef knowndef_table[] = {
#ifdef USE_PAM
PAMDEFS
#endif
{NULL, NULL}
};
#ifdef USE_ECONF
#ifdef VENDORDIR
static const char* vendordir = VENDORDIR;
#else
static const char* vendordir = NULL;
#endif
static const char* sysconfdir = "/etc";
#else
#ifndef LOGINDEFS
#define LOGINDEFS "/etc/login.defs"
#endif
static char def_fname[] = LOGINDEFS; /* login config defs file */
static const char* def_fname = LOGINDEFS; /* login config defs file */
#endif
static bool def_loaded = false; /* are defs already loaded? */
/* local function prototypes */
@@ -423,6 +441,37 @@ out:
return (struct itemdef *) NULL;
}
/*
* setdef_config_file - set the default configuration file path
*
* must be called prior to any def* calls.
*/
void setdef_config_file (const char* file)
{
#ifdef USE_ECONF
size_t len;
char* cp;
len = strlen(file) + strlen(sysconfdir) + 2;
cp = malloc(len);
if (cp == NULL)
exit (13);
snprintf(cp, len, "%s/%s", file, sysconfdir);
sysconfdir = cp;
#ifdef VENDORDIR
len = strlen(file) + strlen(vendordir) + 2;
cp = malloc(len);
if (cp == NULL)
exit (13);
snprintf(cp, len, "%s/%s", file, vendordir);
vendordir = cp;
#endif
#else
def_fname = file;
#endif
}
/*
* def_load - load configuration table
*
@@ -431,9 +480,16 @@ out:
static void def_load (void)
{
#ifdef USE_ECONF
econf_file *defs_file = NULL;
econf_err error;
char **keys;
size_t key_number;
#else
int i;
FILE *fp;
char buf[1024], *name, *value, *s;
#endif
/*
* Set the initialized flag.
@@ -441,6 +497,42 @@ static void def_load (void)
*/
def_loaded = true;
#ifdef USE_ECONF
error = econf_readDirs (&defs_file, vendordir, sysconfdir, "login", "defs", " \t", "#");
if (error) {
if (error == ECONF_NOFILE)
return;
SYSLOG ((LOG_CRIT, "cannot open login definitions [%s]",
econf_errString(error)));
exit (EXIT_FAILURE);
}
if ((error = econf_getKeys(defs_file, NULL, &key_number, &keys))) {
SYSLOG ((LOG_CRIT, "cannot read login definitions [%s]",
econf_errString(error)));
exit (EXIT_FAILURE);
}
for (size_t i = 0; i < key_number; i++) {
char *value;
econf_getStringValue(defs_file, NULL, keys[i], &value);
/*
* Store the value in def_table.
*
* Ignore failures to load the login.defs file.
* The error was already reported to the user and to
* syslog. The tools will just use their default values.
*/
(void)putdef_str (keys[i], value);
}
econf_free (keys);
econf_free (defs_file);
#else
/*
* Open the configuration definitions file.
*/
@@ -504,6 +596,7 @@ static void def_load (void)
}
(void) fclose (fp);
#endif
}

View File

@@ -40,6 +40,7 @@ extern unsigned long getdef_ulong (const char *, unsigned long);
extern unsigned int getdef_unum (const char *, unsigned int);
extern /*@observer@*/ /*@null@*/const char *getdef_str (const char *);
extern int putdef_str (const char *, const char *);
extern void setdef_config_file (const char* file);
/* default UMASK value if not specified in /etc/login.defs */
#define GETDEF_DEFAULT_UMASK 022

View File

@@ -139,7 +139,8 @@ static /*@owned@*/struct commonio_db group_db = {
false, /* changed */
false, /* isopen */
false, /* locked */
false /* readonly */
false, /* readonly */
false /* setname */
};
int gr_setdbname (const char *filename)
@@ -338,8 +339,7 @@ static /*@null@*/struct commonio_entry *merge_group_entries (
errno = ENOMEM;
return NULL;
}
snprintf(new_line, new_line_len, "%s\n%s", gr1->line, gr2->line);
new_line[new_line_len] = '\0';
snprintf(new_line, new_line_len + 1, "%s\n%s", gr1->line, gr2->line);
/* Concatenate the 2 list of members */
for (i=0; NULL != gptr1->gr_mem[i]; i++);

View File

@@ -72,6 +72,14 @@ extern int expire (const struct passwd *, /*@null@*/const struct spwd *);
/* isexpired.c */
extern int isexpired (const struct passwd *, /*@null@*/const struct spwd *);
/* btrfs.c */
#ifdef WITH_BTRFS
extern int btrfs_create_subvolume(const char *path);
extern int btrfs_remove_subvolume(const char *path);
extern int btrfs_is_subvolume(const char *path);
extern int is_btrfs(const char *path);
#endif
/* basename() renamed to Basename() to avoid libc name space confusion */
/* basename.c */
extern /*@observer@*/const char *Basename (const char *str);
@@ -179,6 +187,9 @@ extern int getrange (char *range,
unsigned long *min, bool *has_min,
unsigned long *max, bool *has_max);
/* gettime.c */
extern time_t gettime ();
/* get_uid.c */
extern int get_uid (const char *uidstr, uid_t *uid);
@@ -251,9 +262,9 @@ extern void motd (void);
/* myname.c */
extern /*@null@*//*@only@*/struct passwd *get_my_pwent (void);
/* pam_pass_non_interractive.c */
/* pam_pass_non_interactive.c */
#ifdef USE_PAM
extern int do_pam_passwd_non_interractive (const char *pam_service,
extern int do_pam_passwd_non_interactive (const char *pam_service,
const char *username,
const char* password);
#endif /* USE_PAM */
@@ -271,6 +282,21 @@ extern void do_pam_passwd (const char *user, bool silent, bool change_expired);
/* port.c */
extern bool isttytime (const char *, const char *, time_t);
/* prefix_flag.c */
extern const char* process_prefix_flag (const char* short_opt, int argc, char **argv);
extern struct group *prefix_getgrnam(const char *name);
extern struct group *prefix_getgrgid(gid_t gid);
extern struct passwd *prefix_getpwuid(uid_t uid);
extern struct passwd *prefix_getpwnam(const char* name);
extern struct spwd *prefix_getspnam(const char* name);
extern struct group *prefix_getgr_nam_gid(const char *grname);
extern void prefix_setpwent();
extern struct passwd* prefix_getpwent();
extern void prefix_endpwent();
extern void prefix_setgrent();
extern struct group* prefix_getgrent();
extern void prefix_endgrent();
/* pwd2spwd.c */
#ifndef USE_PAM
extern struct spwd *pwd_to_spwd (const struct passwd *);
@@ -310,6 +336,7 @@ extern /*@observer@*/const char *crypt_make_salt (/*@null@*//*@observer@*/const
#ifdef WITH_SELINUX
extern int set_selinux_file_context (const char *dst_name);
extern int reset_selinux_file_context (void);
extern int check_selinux_permit (const char *perm_name);
#endif
/* semanage.c */
@@ -398,17 +425,19 @@ extern int set_filesize_limit (int blocks);
extern int user_busy (const char *name, uid_t uid);
/* utmp.c */
#ifndef USE_UTMPX
extern /*@null@*/struct utmp *get_current_utmp (void);
extern struct utmp *prepare_utmp (const char *name,
const char *line,
const char *host,
/*@null@*/const struct utmp *ut);
extern int setutmp (struct utmp *ut);
#ifdef USE_UTMPX
#else
extern /*@null@*/struct utmpx *get_current_utmp (void);
extern struct utmpx *prepare_utmpx (const char *name,
const char *line,
const char *host,
/*@null@*/const struct utmp *ut);
/*@null@*/const struct utmpx *ut);
extern int setutmpx (struct utmpx *utx);
#endif /* USE_UTMPX */

View File

@@ -114,7 +114,8 @@ static struct commonio_db passwd_db = {
false, /* changed */
false, /* isopen */
false, /* locked */
false /* readonly */
false, /* readonly */
false /* setname */
};
int pw_setdbname (const char *filename)

View File

@@ -34,6 +34,7 @@
#include "defines.h"
#include <selinux/selinux.h>
#include <selinux/context.h>
#include "prototypes.h"
@@ -98,6 +99,105 @@ int reset_selinux_file_context (void)
return 0;
}
/*
* Log callback for libselinux internal error reporting.
*/
__attribute__((__format__ (printf, 2, 3)))
static int selinux_log_cb (int type, const char *fmt, ...) {
va_list ap;
char *buf;
int r;
#ifdef WITH_AUDIT
static int selinux_audit_fd = -2;
#endif
va_start (ap, fmt);
r = vasprintf (&buf, fmt, ap);
va_end (ap);
if (r < 0) {
return 0;
}
#ifdef WITH_AUDIT
if (-2 == selinux_audit_fd) {
selinux_audit_fd = audit_open ();
if (-1 == selinux_audit_fd) {
/* You get these only when the kernel doesn't have
* audit compiled in. */
if ( (errno != EINVAL)
&& (errno != EPROTONOSUPPORT)
&& (errno != EAFNOSUPPORT)) {
(void) fputs (_("Cannot open audit interface.\n"),
stderr);
SYSLOG ((LOG_WARN, "Cannot open audit interface."));
}
}
}
if (-1 != selinux_audit_fd) {
if (SELINUX_AVC == type) {
if (audit_log_user_avc_message (selinux_audit_fd,
AUDIT_USER_AVC, buf, NULL, NULL,
NULL, 0) > 0) {
goto skip_syslog;
}
} else if (SELINUX_ERROR == type) {
if (audit_log_user_avc_message (selinux_audit_fd,
AUDIT_USER_SELINUX_ERR, buf, NULL, NULL,
NULL, 0) > 0) {
goto skip_syslog;
}
}
}
#endif
SYSLOG ((LOG_WARN, "libselinux: %s", buf));
skip_syslog:
free (buf);
return 0;
}
/*
* check_selinux_permit - Check whether SELinux grants the given
* operation
*
* Parameter is the SELinux permission name, e.g. rootok
*
* Returns 0 when permission is granted
* or something failed but running in
* permissive mode
*/
int check_selinux_permit (const char *perm_name)
{
char *user_context_str;
int r;
if (0 == is_selinux_enabled ()) {
return 0;
}
selinux_set_callback (SELINUX_CB_LOG, (union selinux_callback) selinux_log_cb);
if (getprevcon (&user_context_str) != 0) {
fprintf (stderr,
_("%s: can not get previous SELinux process context: %s\n"),
Prog, strerror (errno));
SYSLOG ((LOG_WARN,
"can not get previous SELinux process context: %s",
strerror (errno)));
return (security_getenforce () != 0);
}
r = selinux_check_access (user_context_str, user_context_str, "passwd", perm_name, NULL);
freecon (user_context_str);
return r;
}
#else /* !WITH_SELINUX */
extern int errno; /* warning: ANSI C forbids an empty source file */
#endif /* !WITH_SELINUX */

View File

@@ -136,7 +136,7 @@ struct group *sgetgrent (const char *buf)
cp++;
}
}
if (i < (NFIELDS - 1) || *grpfields[2] == '\0') {
if (i < (NFIELDS - 1) || *grpfields[2] == '\0' || cp != NULL) {
return (struct group *) 0;
}
grent.gr_name = grpfields[0];

View File

@@ -90,6 +90,11 @@ struct passwd *sgetpwent (const char *buf)
}
}
/* something at the end, columns over shot */
if( cp != NULL ) {
return( NULL );
}
/*
* There must be exactly NFIELDS colon separated fields or
* the entry is invalid. Also, the UID and GID must be non-blank.

View File

@@ -40,6 +40,7 @@
#include "prototypes.h"
#include "defines.h"
#include "commonio.h"
#include "getdef.h"
#include "sgroupio.h"
/*@null@*/ /*@only@*/struct sgrp *__sgr_dup (const struct sgrp *sgent)
@@ -237,7 +238,8 @@ static struct commonio_db gshadow_db = {
false, /* changed */
false, /* isopen */
false, /* locked */
false /* readonly */
false, /* readonly */
false /* setname */
};
int sgr_setdbname (const char *filename)

View File

@@ -40,6 +40,7 @@
#include <shadow.h>
#include <stdio.h>
#include "commonio.h"
#include "getdef.h"
#include "shadowio.h"
#ifdef WITH_TCB
#include <tcb.h>
@@ -113,7 +114,8 @@ static struct commonio_db shadow_db = {
false, /* changed */
false, /* isopen */
false, /* locked */
false /* readonly */
false, /* readonly */
false /* setname */
};
int spw_setdbname (const char *filename)

View File

@@ -31,8 +31,8 @@
*/
/* $Id$ */
#ifndef _SHADOWIO_H
#define _SHADOWIO_H
#ifndef SHADOWIO_H
#define SHADOWIO_H
#include "defines.h"

View File

@@ -68,8 +68,10 @@ int run_command (const char *cmd, const char *argv[],
do {
wpid = waitpid (pid, status, 0);
if ((pid_t)-1 == wpid && errno == ECHILD)
break;
} while ( ((pid_t)-1 == wpid && errno == EINTR)
|| (wpid != pid));
|| ((pid_t)-1 != wpid && wpid != pid));
if ((pid_t)-1 == wpid) {
fprintf (stderr, "%s: waitpid (status: %d): %s\n",

75
lib/sssd.c Normal file
View File

@@ -0,0 +1,75 @@
/* Author: Peter Vrabec <pvrabec@redhat.com> */
#include <config.h>
#ifdef USE_SSSD
#include <stdio.h>
#include <sys/wait.h>
#include <sys/types.h>
#include "exitcodes.h"
#include "defines.h"
#include "prototypes.h"
#include "sssd.h"
#define MSG_SSSD_FLUSH_CACHE_FAILED "%s: Failed to flush the sssd cache.\n"
int sssd_flush_cache (int dbflags)
{
int status, code, rv;
const char *cmd = "/usr/sbin/sss_cache";
char *sss_cache_args = NULL;
const char *spawnedArgs[] = {"sss_cache", NULL, NULL};
const char *spawnedEnv[] = {NULL};
int i = 0;
sss_cache_args = malloc(4);
if (sss_cache_args == NULL) {
return -1;
}
sss_cache_args[i++] = '-';
if (dbflags & SSSD_DB_PASSWD) {
sss_cache_args[i++] = 'U';
}
if (dbflags & SSSD_DB_GROUP) {
sss_cache_args[i++] = 'G';
}
sss_cache_args[i++] = '\0';
if (i == 2) {
/* Neither passwd nor group, nothing to do */
free(sss_cache_args);
return 0;
}
spawnedArgs[1] = sss_cache_args;
rv = run_command (cmd, spawnedArgs, spawnedEnv, &status);
free(sss_cache_args);
if (rv != 0) {
/* run_command writes its own more detailed message. */
(void) fprintf (stderr, _(MSG_SSSD_FLUSH_CACHE_FAILED), Prog);
return -1;
}
code = WEXITSTATUS (status);
if (!WIFEXITED (status)) {
(void) fprintf (stderr,
_("%s: sss_cache did not terminate normally (signal %d)\n"),
Prog, WTERMSIG (status));
return -1;
} else if (code == E_CMD_NOTFOUND) {
/* sss_cache is not installed, or it is installed but uses an
interpreter that is missing. Probably the former. */
return 0;
} else if (code != 0) {
(void) fprintf (stderr, _("%s: sss_cache exited with status %d\n"),
Prog, code);
(void) fprintf (stderr, _(MSG_SSSD_FLUSH_CACHE_FAILED), Prog);
return -1;
}
return 0;
}
#else /* USE_SSSD */
extern int errno; /* warning: ANSI C forbids an empty source file */
#endif /* USE_SSSD */

17
lib/sssd.h Normal file
View File

@@ -0,0 +1,17 @@
#ifndef _SSSD_H_
#define _SSSD_H_
#define SSSD_DB_PASSWD 0x001
#define SSSD_DB_GROUP 0x002
/*
* sssd_flush_cache - flush specified service buffer in sssd cache
*/
#ifdef USE_SSSD
extern int sssd_flush_cache (int dbflags);
#else
#define sssd_flush_cache(service) (0)
#endif
#endif

View File

@@ -152,11 +152,6 @@ static struct commonio_ops subordinate_ops = {
NULL, /* close_hook */
};
static /*@observer@*/ /*@null*/const struct subordinate_range *subordinate_next(struct commonio_db *db)
{
return (const struct subordinate_range *)commonio_next (db);
}
/*
* range_exists: Check whether @owner owns any ranges
*
@@ -181,7 +176,7 @@ static const bool range_exists(struct commonio_db *db, const char *owner)
* subuid @val.
*
* @db: database to query
* @owner: owning uid being queuried
* @owner: owning uid being queried
* @val: subuid being searched for.
*
* Returns a range of subuids belonging to @owner and including the subuid
@@ -221,7 +216,7 @@ static const struct subordinate_range *find_range(struct commonio_db *db,
/*
* Search loop above did not produce any result. Let's rerun it,
* but this time try to matcha actual UIDs. The first entry that
* but this time try to match actual UIDs. The first entry that
* matches is considered a success.
* (It may be specified as literal UID or as another username which
* has the same UID as the username we are looking for.)
@@ -418,7 +413,7 @@ fail:
* @start: the first uid in the owned range
* @count: the number of uids in the range
*
* Return 1 if the range is already present or on succcess. On error
* Return 1 if the range is already present or on success. On error
* return 0 and set errno appropriately.
*/
static int add_range(struct commonio_db *db,
@@ -550,7 +545,8 @@ static struct commonio_db subordinate_uid_db = {
false, /* changed */
false, /* isopen */
false, /* locked */
false /* readonly */
false, /* readonly */
false /* setname */
};
int sub_uid_setdbname (const char *filename)
@@ -631,7 +627,8 @@ static struct commonio_db subordinate_gid_db = {
false, /* changed */
false, /* isopen */
false, /* locked */
false /* readonly */
false, /* readonly */
false /* setname */
};
int sub_gid_setdbname (const char *filename)

View File

@@ -1,7 +1,7 @@
EXTRA_DIST = .indent.pro xgetXXbyYY.c
INCLUDES = -I$(top_srcdir)/lib
AM_CPPFLAGS = -I$(top_srcdir)/lib $(ECONF_CPPFLAGS)
noinst_LIBRARIES = libmisc.a
@@ -31,6 +31,7 @@ libmisc_a_SOURCES = \
getdate.y \
getgr_nam_gid.c \
getrange.c \
gettime.c \
hushed.c \
idmapping.h \
idmapping.c \
@@ -43,7 +44,8 @@ libmisc_a_SOURCES = \
myname.c \
obscure.c \
pam_pass.c \
pam_pass_non_interractive.c \
pam_pass_non_interactive.c \
prefix_flag.c \
pwd2spwd.c \
pwdcheck.c \
pwd_init.c \
@@ -70,3 +72,8 @@ libmisc_a_SOURCES = \
xgetspnam.c \
xmalloc.c \
yesno.c
if WITH_BTRFS
libmisc_a_SOURCES += btrfs.c
endif

111
libmisc/btrfs.c Normal file
View File

@@ -0,0 +1,111 @@
#include <linux/btrfs_tree.h>
#include <linux/magic.h>
#include <sys/statfs.h>
#include <stdbool.h>
#include "prototypes.h"
static bool path_exists(const char *p)
{
int ret;
struct stat sb;
return stat(p, &sb) == 0;
}
static const char *btrfs_cmd(void)
{
const char *btrfs_paths[] = {"/sbin/btrfs",
"/bin/btrfs", "/usr/sbin/btrfs", "/usr/bin/btrfs", NULL};
const char *p;
int i;
for (i = 0, p = btrfs_paths[i]; p; i++, p = btrfs_paths[i])
if (path_exists(p))
return p;
return NULL;
}
static int run_btrfs_subvolume_cmd(const char *subcmd, const char *arg1, const char *arg2)
{
int status = 0;
const char *cmd = btrfs_cmd();
const char *argv[] = {
"btrfs",
"subvolume",
subcmd,
arg1,
arg2,
NULL
};
if (access(cmd, X_OK)) {
return 1;
}
if (run_command(cmd, argv, NULL, &status))
return -1;
return status;
}
int btrfs_create_subvolume(const char *path)
{
return run_btrfs_subvolume_cmd("create", path, NULL);
}
int btrfs_remove_subvolume(const char *path)
{
return run_btrfs_subvolume_cmd("delete", "-C", path);
}
/* Adapted from btrfsprogs */
/*
* This intentionally duplicates btrfs_util_is_subvolume_fd() instead of opening
* a file descriptor and calling it, because fstat() and fstatfs() don't accept
* file descriptors opened with O_PATH on old kernels (before v3.6 and before
* v3.12, respectively), but stat() and statfs() can be called on a path that
* the user doesn't have read or write permissions to.
*
* returns:
* 1 - btrfs subvolume
* 0 - not btrfs subvolume
* -1 - error
*/
int btrfs_is_subvolume(const char *path)
{
struct stat st;
int ret;
ret = is_btrfs(path);
if (ret <= 0)
return ret;
ret = stat(path, &st);
if (ret == -1)
return -1;
if (st.st_ino != BTRFS_FIRST_FREE_OBJECTID || !S_ISDIR(st.st_mode)) {
return 0;
}
return 1;
}
/* Adapted from btrfsprogs */
int is_btrfs(const char *path)
{
struct statfs sfs;
int ret;
ret = statfs(path, &sfs);
if (ret == -1)
return -1;
return sfs.f_type == BTRFS_SUPER_MAGIC;
}

View File

@@ -46,11 +46,18 @@
#include "defines.h"
#include "chkname.h"
int allow_bad_names = false;
static bool is_valid_name (const char *name)
{
if (allow_bad_names) {
return true;
}
/*
* User/group names must match [a-z_][a-z0-9_-]*[$]
*/
if (('\0' == *name) ||
!((('a' <= *name) && ('z' >= *name)) || ('_' == *name))) {
return false;

View File

@@ -50,7 +50,7 @@ static bool is_listed (const char *cfgin, const char *tty, bool def);
static bool is_listed (const char *cfgin, const char *tty, bool def)
{
FILE *fp;
char buf[200], *s;
char buf[1024], *s;
const char *cons;
/*
@@ -70,7 +70,8 @@ static bool is_listed (const char *cfgin, const char *tty, bool def)
if (*cons != '/') {
char *pbuf;
strcpy (buf, cons);
strncpy (buf, cons, sizeof (buf));
buf[sizeof (buf) - 1] = '\0';
pbuf = &buf[0];
while ((s = strtok (pbuf, ":")) != NULL) {
if (strcmp (s, tty) == 0) {

View File

@@ -69,7 +69,7 @@ extern int failcheck (uid_t uid, struct faillog *fl, bool failed);
extern void failprint (const struct faillog *);
/*
* failtmp - update the cummulative failure log
* failtmp - update the cumulative failure log
*
* failtmp updates the (struct utmp) formatted failure log which
* maintains a record of all login failures.

View File

@@ -1,6 +1,7 @@
/*
* Copyright (c) 1991 - 1994, Julianne Frances Haugh
* Copyright (c) 2008 - 2011, Nicolas François
* Copyright (c) 2014, Red Hat, Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -38,6 +39,117 @@
#include "groupio.h"
#include "getdef.h"
/*
* get_ranges - Get the minimum and maximum ID ranges for the search
*
* This function will return the minimum and maximum ranges for IDs
*
* 0: The function completed successfully
* EINVAL: The provided ranges are impossible (such as maximum < minimum)
*
* preferred_min: The special-case minimum value for a specifically-
* requested ID, which may be lower than the standard min_id
*/
static int get_ranges (bool sys_group, gid_t *min_id, gid_t *max_id,
gid_t *preferred_min)
{
gid_t gid_def_max = 0;
if (sys_group) {
/* System groups */
/* A requested ID is allowed to be below the autoselect range */
*preferred_min = (gid_t) 1;
/* Get the minimum ID range from login.defs or default to 101 */
*min_id = (gid_t) getdef_ulong ("SYS_GID_MIN", 101UL);
/*
* If SYS_GID_MAX is unspecified, we should assume it to be one
* less than the GID_MIN (which is reserved for non-system accounts)
*/
gid_def_max = (gid_t) getdef_ulong ("GID_MIN", 1000UL) - 1;
*max_id = (gid_t) getdef_ulong ("SYS_GID_MAX",
(unsigned long) gid_def_max);
/* Check that the ranges make sense */
if (*max_id < *min_id) {
(void) fprintf (stderr,
_("%s: Invalid configuration: SYS_GID_MIN (%lu), "
"GID_MIN (%lu), SYS_GID_MAX (%lu)\n"),
Prog, (unsigned long) *min_id,
getdef_ulong ("GID_MIN", 1000UL),
(unsigned long) *max_id);
return EINVAL;
}
} else {
/* Non-system groups */
/* Get the values from login.defs or use reasonable defaults */
*min_id = (gid_t) getdef_ulong ("GID_MIN", 1000UL);
*max_id = (gid_t) getdef_ulong ("GID_MAX", 60000UL);
/*
* The preferred minimum should match the standard ID minimum
* for non-system groups.
*/
*preferred_min = *min_id;
/* Check that the ranges make sense */
if (*max_id < *min_id) {
(void) fprintf (stderr,
_("%s: Invalid configuration: GID_MIN (%lu), "
"GID_MAX (%lu)\n"),
Prog, (unsigned long) *min_id,
(unsigned long) *max_id);
return EINVAL;
}
}
return 0;
}
/*
* check_gid - See if the requested GID is available
*
* On success, return 0
* If the ID is in use, return EEXIST
* If the ID is outside the range, return ERANGE
* In other cases, return errno from getgrgid()
*/
static int check_gid (const gid_t gid,
const gid_t gid_min,
const gid_t gid_max,
bool *used_gids)
{
/* First test that the preferred ID is in the range */
if (gid < gid_min || gid > gid_max) {
return ERANGE;
}
/*
* Check whether we already detected this GID
* using the gr_next() loop
*/
if (used_gids != NULL && used_gids[gid]) {
return EEXIST;
}
/* Check if the GID exists according to NSS */
errno = 0;
if (prefix_getgrgid (gid) != NULL) {
return EEXIST;
} else {
/* getgrgid() was NULL
* we have to ignore errors as temporary
* failures of remote user identity services
* would completely block user/group creation
*/
}
/* If we've made it here, the GID must be available */
return 0;
}
/*
* find_new_gid - Find a new unused GID.
*
@@ -49,161 +161,338 @@
* Return 0 on success, -1 if no unused GIDs are available.
*/
int find_new_gid (bool sys_group,
gid_t *gid,
/*@null@*/gid_t const *preferred_gid)
gid_t *gid,
/*@null@*/gid_t const *preferred_gid)
{
const struct group *grp;
gid_t gid_min, gid_max, group_id;
bool *used_gids;
const struct group *grp;
gid_t gid_min, gid_max, preferred_min;
gid_t id;
gid_t lowest_found, highest_found;
int result;
int nospam = 0;
assert (gid != NULL);
assert(gid != NULL);
if (!sys_group) {
gid_min = (gid_t) getdef_ulong ("GID_MIN", 1000UL);
gid_max = (gid_t) getdef_ulong ("GID_MAX", 60000UL);
if (gid_max < gid_min) {
(void) fprintf (stderr,
_("%s: Invalid configuration: GID_MIN (%lu), GID_MAX (%lu)\n"),
Prog, (unsigned long) gid_min, (unsigned long) gid_max);
return -1;
}
} else {
gid_min = (gid_t) getdef_ulong ("SYS_GID_MIN", 101UL);
gid_max = (gid_t) getdef_ulong ("GID_MIN", 1000UL) - 1;
gid_max = (gid_t) getdef_ulong ("SYS_GID_MAX", (unsigned long) gid_max);
if (gid_max < gid_min) {
(void) fprintf (stderr,
_("%s: Invalid configuration: SYS_GID_MIN (%lu), GID_MIN (%lu), SYS_GID_MAX (%lu)\n"),
Prog, (unsigned long) gid_min, getdef_ulong ("GID_MIN", 1000UL), (unsigned long) gid_max);
/*
* First, figure out what ID range is appropriate for
* automatic assignment
*/
result = get_ranges (sys_group, &gid_min, &gid_max, &preferred_min);
if (result == EINVAL) {
return -1;
}
/* Check if the preferred GID is available */
if (preferred_gid) {
result = check_gid (*preferred_gid, preferred_min, gid_max, NULL);
if (result == 0) {
/*
* Make sure the GID isn't queued for use already
*/
if (gr_locate_gid (*preferred_gid) == NULL) {
*gid = *preferred_gid;
return 0;
}
/*
* gr_locate_gid() found the GID in an as-yet uncommitted
* entry. We'll proceed below and auto-set a GID.
*/
} else if (result == EEXIST || result == ERANGE) {
/*
* Continue on below. At this time, we won't
* treat these two cases differently.
*/
} else {
/*
* An unexpected error occurred. We should report
* this and fail the group creation.
* This differs from the automatic creation
* behavior below, since if a specific GID was
* requested and generated an error, the user is
* more likely to want to stop and address the
* issue.
*/
fprintf (stderr,
_("%s: Encountered error attempting to use "
"preferred GID: %s\n"),
Prog, strerror (result));
return -1;
}
}
/*
* Search the entire group file,
* looking for the next unused value.
*
* We first check the local database with gr_rewind/gr_next to find
* all local values that are in use.
*
* We then compare the next free value to all databases (local and
* remote) and iterate until we find a free one. If there are free
* values beyond the lowest (system groups) or highest (non-system
* groups), we will prefer those and avoid potentially reclaiming a
* deleted group (which can be a security issue, since it may grant
* access to files belonging to that former group).
*
* If there are no GIDs available at the end of the search, we will
* have no choice but to iterate through the range looking for gaps.
*
*/
/* Create an array to hold all of the discovered GIDs */
used_gids = malloc (sizeof (bool) * (gid_max +1));
if (NULL == used_gids) {
fprintf (stderr,
_("%s: failed to allocate memory: %s\n"),
Prog, strerror (errno));
_("%s: failed to allocate memory: %s\n"),
Prog, strerror (errno));
return -1;
}
memset (used_gids, false, sizeof (bool) * (gid_max + 1));
if ( (NULL != preferred_gid)
&& (*preferred_gid >= gid_min)
&& (*preferred_gid <= gid_max)
/* Check if the user exists according to NSS */
&& (getgrgid (*preferred_gid) == NULL)
/* Check also the local database in case of uncommitted
* changes */
&& (gr_locate_gid (*preferred_gid) == NULL)) {
*gid = *preferred_gid;
free (used_gids);
return 0;
}
/*
* Search the entire group file,
* looking for the largest unused value.
*
* We check the list of groups according to NSS (setgrent/getgrent),
* but we also check the local database (gr_rewind/gr_next) in case
* some groups were created but the changes were not committed yet.
*/
if (sys_group) {
gid_t id;
/* setgrent / getgrent / endgrent can be very slow with
* LDAP configurations (and many accounts).
* Since there is a limited amount of IDs to be tested
* for system accounts, we just check the existence
* of IDs with getgrgid.
/* First look for the lowest and highest value in the local database */
(void) gr_rewind ();
highest_found = gid_min;
lowest_found = gid_max;
while ((grp = gr_next ()) != NULL) {
/*
* Does this entry have a lower GID than the lowest we've found
* so far?
*/
group_id = gid_max;
for (id = gid_max; id >= gid_min; id--) {
if (getgrgid (id) != NULL) {
group_id = id - 1;
used_gids[id] = true;
}
if ((grp->gr_gid <= lowest_found) && (grp->gr_gid >= gid_min)) {
lowest_found = grp->gr_gid - 1;
}
(void) gr_rewind ();
while ((grp = gr_next ()) != NULL) {
if ((grp->gr_gid <= group_id) && (grp->gr_gid >= gid_min)) {
group_id = grp->gr_gid - 1;
}
/* create index of used GIDs */
if (grp->gr_gid <= gid_max) {
used_gids[grp->gr_gid] = true;
}
/*
* Does this entry have a higher GID than the highest we've found
* so far?
*/
if ((grp->gr_gid >= highest_found) && (grp->gr_gid <= gid_max)) {
highest_found = grp->gr_gid + 1;
}
} else {
group_id = gid_min;
setgrent ();
while ((grp = getgrent ()) != NULL) {
if ((grp->gr_gid >= group_id) && (grp->gr_gid <= gid_max)) {
group_id = grp->gr_gid + 1;
}
/* create index of used GIDs */
if (grp->gr_gid <= gid_max) {
used_gids[grp->gr_gid] = true;
}
}
endgrent ();
(void) gr_rewind ();
while ((grp = gr_next ()) != NULL) {
if ((grp->gr_gid >= group_id) && (grp->gr_gid <= gid_max)) {
group_id = grp->gr_gid + 1;
}
/* create index of used GIDs */
if (grp->gr_gid <= gid_max) {
used_gids[grp->gr_gid] = true;
}
/* create index of used GIDs */
if (grp->gr_gid >= gid_min
&& grp->gr_gid <= gid_max) {
used_gids[grp->gr_gid] = true;
}
}
/*
* If a group (resp. system group) with GID equal to GID_MAX (resp.
* GID_MIN) exists, the above algorithm will give us GID_MAX+1
* (resp. GID_MIN-1) even if not unique. Search for the first free
* GID starting with GID_MIN (resp. GID_MAX).
*/
if (sys_group) {
if (group_id < gid_min) {
for (group_id = gid_max; group_id >= gid_min; group_id--) {
if (false == used_gids[group_id]) {
break;
}
}
if (group_id < gid_min) {
fprintf (stderr,
_("%s: Can't get unique system GID (no more available GIDs)\n"),
Prog);
SYSLOG ((LOG_WARN,
"no more available GID on the system"));
/*
* For system groups, we want to start from the
* top of the range and work downwards.
*/
/*
* At the conclusion of the gr_next() search, we will either
* have a presumed-free GID or we will be at GID_MIN - 1.
*/
if (lowest_found < gid_min) {
/*
* In this case, a GID is in use at GID_MIN.
*
* We will reset the search to GID_MAX and proceed down
* through all the GIDs (skipping those we detected with
* used_gids) for a free one. It is a known issue that
* this may result in reusing a previously-deleted GID,
* so administrators should be instructed to use this
* auto-detection with care (and prefer to assign GIDs
* explicitly).
*/
lowest_found = gid_max;
}
/* Search through all of the IDs in the range */
for (id = lowest_found; id >= gid_min; id--) {
result = check_gid (id, gid_min, gid_max, used_gids);
if (result == 0) {
/* This GID is available. Return it. */
*gid = id;
free (used_gids);
return -1;
return 0;
} else if (result == EEXIST) {
/* This GID is in use, we'll continue to the next */
} else {
/*
* An unexpected error occurred.
*
* Only report it the first time to avoid spamming
* the logs
*
*/
if (!nospam) {
fprintf (stderr,
_("%s: Can't get unique system GID (%s). "
"Suppressing additional messages.\n"),
Prog, strerror (result));
SYSLOG ((LOG_ERR,
"Error checking available GIDs: %s",
strerror (result)));
nospam = 1;
}
/*
* We will continue anyway. Hopefully a later GID
* will work properly.
*/
}
}
} else {
if (group_id > gid_max) {
for (group_id = gid_min; group_id <= gid_max; group_id++) {
if (false == used_gids[group_id]) {
break;
/*
* If we get all the way through the loop, try again from GID_MAX,
* unless that was where we previously started. (NOTE: the worst-case
* scenario here is that we will run through (GID_MAX - GID_MIN - 1)
* cycles *again* if we fall into this case with lowest_found as
* GID_MAX - 1, all groups in the range in use and maintained by
* network services such as LDAP.)
*/
if (lowest_found != gid_max) {
for (id = gid_max; id >= gid_min; id--) {
result = check_gid (id, gid_min, gid_max, used_gids);
if (result == 0) {
/* This GID is available. Return it. */
*gid = id;
free (used_gids);
return 0;
} else if (result == EEXIST) {
/* This GID is in use, we'll continue to the next */
} else {
/*
* An unexpected error occurred.
*
* Only report it the first time to avoid spamming
* the logs
*
*/
if (!nospam) {
fprintf (stderr,
_("%s: Can't get unique system GID (%s). "
"Suppressing additional messages.\n"),
Prog, strerror (result));
SYSLOG ((LOG_ERR,
"Error checking available GIDs: %s",
strerror (result)));
nospam = 1;
}
/*
* We will continue anyway. Hopefully a later GID
* will work properly.
*/
}
}
if (group_id > gid_max) {
fprintf (stderr,
_("%s: Can't get unique GID (no more available GIDs)\n"),
Prog);
SYSLOG ((LOG_WARN, "no more available GID on the system"));
}
} else { /* !sys_group */
/*
* For non-system groups, we want to start from the
* bottom of the range and work upwards.
*/
/*
* At the conclusion of the gr_next() search, we will either
* have a presumed-free GID or we will be at GID_MAX + 1.
*/
if (highest_found > gid_max) {
/*
* In this case, a GID is in use at GID_MAX.
*
* We will reset the search to GID_MIN and proceed up
* through all the GIDs (skipping those we detected with
* used_gids) for a free one. It is a known issue that
* this may result in reusing a previously-deleted GID,
* so administrators should be instructed to use this
* auto-detection with care (and prefer to assign GIDs
* explicitly).
*/
highest_found = gid_min;
}
/* Search through all of the IDs in the range */
for (id = highest_found; id <= gid_max; id++) {
result = check_gid (id, gid_min, gid_max, used_gids);
if (result == 0) {
/* This GID is available. Return it. */
*gid = id;
free (used_gids);
return -1;
return 0;
} else if (result == EEXIST) {
/* This GID is in use, we'll continue to the next */
} else {
/*
* An unexpected error occurred.
*
* Only report it the first time to avoid spamming
* the logs
*
*/
if (!nospam) {
fprintf (stderr,
_("%s: Can't get unique GID (%s). "
"Suppressing additional messages.\n"),
Prog, strerror (result));
SYSLOG ((LOG_ERR,
"Error checking available GIDs: %s",
strerror (result)));
nospam = 1;
}
/*
* We will continue anyway. Hopefully a later GID
* will work properly.
*/
}
}
/*
* If we get all the way through the loop, try again from GID_MIN,
* unless that was where we previously started. (NOTE: the worst-case
* scenario here is that we will run through (GID_MAX - GID_MIN - 1)
* cycles *again* if we fall into this case with highest_found as
* GID_MIN + 1, all groups in the range in use and maintained by
* network services such as LDAP.)
*/
if (highest_found != gid_min) {
for (id = gid_min; id <= gid_max; id++) {
result = check_gid (id, gid_min, gid_max, used_gids);
if (result == 0) {
/* This GID is available. Return it. */
*gid = id;
free (used_gids);
return 0;
} else if (result == EEXIST) {
/* This GID is in use, we'll continue to the next */
} else {
/*
* An unexpected error occurred.
*
* Only report it the first time to avoid spamming
* the logs
*
*/
if (!nospam) {
fprintf (stderr,
_("%s: Can't get unique GID (%s). "
"Suppressing additional messages.\n"),
Prog, strerror (result));
SYSLOG ((LOG_ERR,
"Error checking available GIDs: %s",
strerror (result)));
nospam = 1;
}
/*
* We will continue anyway. Hopefully a later GID
* will work properly.
*/
}
}
}
}
/* The code reached here and found no available IDs in the range */
fprintf (stderr,
_("%s: Can't get unique GID (no more available GIDs)\n"),
Prog);
SYSLOG ((LOG_WARN, "no more available GIDs on the system"));
free (used_gids);
*gid = group_id;
return 0;
return -1;
}

View File

@@ -1,6 +1,7 @@
/*
* Copyright (c) 1991 - 1994, Julianne Frances Haugh
* Copyright (c) 2008 - 2011, Nicolas François
* Copyright (c) 2014, Red Hat, Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -38,6 +39,117 @@
#include "pwio.h"
#include "getdef.h"
/*
* get_ranges - Get the minimum and maximum ID ranges for the search
*
* This function will return the minimum and maximum ranges for IDs
*
* 0: The function completed successfully
* EINVAL: The provided ranges are impossible (such as maximum < minimum)
*
* preferred_min: The special-case minimum value for a specifically-
* requested ID, which may be lower than the standard min_id
*/
static int get_ranges (bool sys_user, uid_t *min_id, uid_t *max_id,
uid_t *preferred_min)
{
uid_t uid_def_max = 0;
if (sys_user) {
/* System users */
/* A requested ID is allowed to be below the autoselect range */
*preferred_min = (uid_t) 1;
/* Get the minimum ID range from login.defs or default to 101 */
*min_id = (uid_t) getdef_ulong ("SYS_UID_MIN", 101UL);
/*
* If SYS_UID_MAX is unspecified, we should assume it to be one
* less than the UID_MIN (which is reserved for non-system accounts)
*/
uid_def_max = (uid_t) getdef_ulong ("UID_MIN", 1000UL) - 1;
*max_id = (uid_t) getdef_ulong ("SYS_UID_MAX",
(unsigned long) uid_def_max);
/* Check that the ranges make sense */
if (*max_id < *min_id) {
(void) fprintf (stderr,
_("%s: Invalid configuration: SYS_UID_MIN (%lu), "
"UID_MIN (%lu), SYS_UID_MAX (%lu)\n"),
Prog, (unsigned long) *min_id,
getdef_ulong ("UID_MIN", 1000UL),
(unsigned long) *max_id);
return EINVAL;
}
} else {
/* Non-system users */
/* Get the values from login.defs or use reasonable defaults */
*min_id = (uid_t) getdef_ulong ("UID_MIN", 1000UL);
*max_id = (uid_t) getdef_ulong ("UID_MAX", 60000UL);
/*
* The preferred minimum should match the standard ID minimum
* for non-system users.
*/
*preferred_min = *min_id;
/* Check that the ranges make sense */
if (*max_id < *min_id) {
(void) fprintf (stderr,
_("%s: Invalid configuration: UID_MIN (%lu), "
"UID_MAX (%lu)\n"),
Prog, (unsigned long) *min_id,
(unsigned long) *max_id);
return EINVAL;
}
}
return 0;
}
/*
* check_uid - See if the requested UID is available
*
* On success, return 0
* If the ID is in use, return EEXIST
* If the ID is outside the range, return ERANGE
* In other cases, return errno from getpwuid()
*/
static int check_uid(const uid_t uid,
const uid_t uid_min,
const uid_t uid_max,
bool *used_uids)
{
/* First test that the preferred ID is in the range */
if (uid < uid_min || uid > uid_max) {
return ERANGE;
}
/*
* Check whether we already detected this UID
* using the pw_next() loop
*/
if (used_uids != NULL && used_uids[uid]) {
return EEXIST;
}
/* Check if the UID exists according to NSS */
errno = 0;
if (prefix_getpwuid(uid) != NULL) {
return EEXIST;
} else {
/* getpwuid() was NULL
* we have to ignore errors as temporary
* failures of remote user identity services
* would completely block user/group creation
*/
}
/* If we've made it here, the UID must be available */
return 0;
}
/*
* find_new_uid - Find a new unused UID.
*
@@ -48,162 +160,339 @@
*
* Return 0 on success, -1 if no unused UIDs are available.
*/
int find_new_uid (bool sys_user,
uid_t *uid,
/*@null@*/uid_t const *preferred_uid)
int find_new_uid(bool sys_user,
uid_t *uid,
/*@null@*/uid_t const *preferred_uid)
{
const struct passwd *pwd;
uid_t uid_min, uid_max, user_id;
bool *used_uids;
const struct passwd *pwd;
uid_t uid_min, uid_max, preferred_min;
uid_t id;
uid_t lowest_found, highest_found;
int result;
int nospam = 0;
assert (uid != NULL);
if (!sys_user) {
uid_min = (uid_t) getdef_ulong ("UID_MIN", 1000UL);
uid_max = (uid_t) getdef_ulong ("UID_MAX", 60000UL);
if (uid_max < uid_min) {
(void) fprintf (stderr,
_("%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"),
Prog, (unsigned long) uid_min, (unsigned long) uid_max);
return -1;
}
} else {
uid_min = (uid_t) getdef_ulong ("SYS_UID_MIN", 101UL);
uid_max = (uid_t) getdef_ulong ("UID_MIN", 1000UL) - 1;
uid_max = (uid_t) getdef_ulong ("SYS_UID_MAX", (unsigned long) uid_max);
if (uid_max < uid_min) {
(void) fprintf (stderr,
_("%s: Invalid configuration: SYS_UID_MIN (%lu), UID_MIN (%lu), SYS_UID_MAX (%lu)\n"),
Prog, (unsigned long) uid_min, getdef_ulong ("UID_MIN", 1000UL), (unsigned long) uid_max);
/*
* First, figure out what ID range is appropriate for
* automatic assignment
*/
result = get_ranges (sys_user, &uid_min, &uid_max, &preferred_min);
if (result == EINVAL) {
return -1;
}
/* Check if the preferred UID is available */
if (preferred_uid) {
result = check_uid (*preferred_uid, preferred_min, uid_max, NULL);
if (result == 0) {
/*
* Make sure the UID isn't queued for use already
*/
if (pw_locate_uid (*preferred_uid) == NULL) {
*uid = *preferred_uid;
return 0;
}
/*
* pw_locate_uid() found the UID in an as-yet uncommitted
* entry. We'll proceed below and auto-set an UID.
*/
} else if (result == EEXIST || result == ERANGE) {
/*
* Continue on below. At this time, we won't
* treat these two cases differently.
*/
} else {
/*
* An unexpected error occurred. We should report
* this and fail the user creation.
* This differs from the automatic creation
* behavior below, since if a specific UID was
* requested and generated an error, the user is
* more likely to want to stop and address the
* issue.
*/
fprintf (stderr,
_("%s: Encountered error attempting to use "
"preferred UID: %s\n"),
Prog, strerror (result));
return -1;
}
}
/*
* Search the entire passwd file,
* looking for the next unused value.
*
* We first check the local database with pw_rewind/pw_next to find
* all local values that are in use.
*
* We then compare the next free value to all databases (local and
* remote) and iterate until we find a free one. If there are free
* values beyond the lowest (system users) or highest (non-system
* users), we will prefer those and avoid potentially reclaiming a
* deleted user (which can be a security issue, since it may grant
* access to files belonging to that former user).
*
* If there are no UIDs available at the end of the search, we will
* have no choice but to iterate through the range looking for gaps.
*
*/
/* Create an array to hold all of the discovered UIDs */
used_uids = malloc (sizeof (bool) * (uid_max +1));
if (NULL == used_uids) {
fprintf (stderr,
_("%s: failed to allocate memory: %s\n"),
Prog, strerror (errno));
_("%s: failed to allocate memory: %s\n"),
Prog, strerror (errno));
return -1;
}
memset (used_uids, false, sizeof (bool) * (uid_max + 1));
if ( (NULL != preferred_uid)
&& (*preferred_uid >= uid_min)
&& (*preferred_uid <= uid_max)
/* Check if the user exists according to NSS */
&& (getpwuid (*preferred_uid) == NULL)
/* Check also the local database in case of uncommitted
* changes */
&& (pw_locate_uid (*preferred_uid) == NULL)) {
*uid = *preferred_uid;
free (used_uids);
return 0;
}
/*
* Search the entire password file,
* looking for the largest unused value.
*
* We check the list of users according to NSS (setpwent/getpwent),
* but we also check the local database (pw_rewind/pw_next) in case
* some users were created but the changes were not committed yet.
*/
if (sys_user) {
uid_t id;
/* setpwent / getpwent / endpwent can be very slow with
* LDAP configurations (and many accounts).
* Since there is a limited amount of IDs to be tested
* for system accounts, we just check the existence
* of IDs with getpwuid.
/* First look for the lowest and highest value in the local database */
(void) pw_rewind ();
highest_found = uid_min;
lowest_found = uid_max;
while ((pwd = pw_next ()) != NULL) {
/*
* Does this entry have a lower UID than the lowest we've found
* so far?
*/
user_id = uid_max;
for (id = uid_max; id >= uid_min; id--) {
if (getpwuid (id) != NULL) {
user_id = id - 1;
used_uids[id] = true;
}
if ((pwd->pw_uid <= lowest_found) && (pwd->pw_uid >= uid_min)) {
lowest_found = pwd->pw_uid - 1;
}
(void) pw_rewind ();
while ((pwd = pw_next ()) != NULL) {
if ((pwd->pw_uid <= user_id) && (pwd->pw_uid >= uid_min)) {
user_id = pwd->pw_uid - 1;
}
/* create index of used UIDs */
if (pwd->pw_uid <= uid_max) {
used_uids[pwd->pw_uid] = true;
}
/*
* Does this entry have a higher UID than the highest we've found
* so far?
*/
if ((pwd->pw_uid >= highest_found) && (pwd->pw_uid <= uid_max)) {
highest_found = pwd->pw_uid + 1;
}
} else {
user_id = uid_min;
setpwent ();
while ((pwd = getpwent ()) != NULL) {
if ((pwd->pw_uid >= user_id) && (pwd->pw_uid <= uid_max)) {
user_id = pwd->pw_uid + 1;
}
/* create index of used UIDs */
if (pwd->pw_uid <= uid_max) {
used_uids[pwd->pw_uid] = true;
}
}
endpwent ();
(void) pw_rewind ();
while ((pwd = pw_next ()) != NULL) {
if ((pwd->pw_uid >= user_id) && (pwd->pw_uid <= uid_max)) {
user_id = pwd->pw_uid + 1;
}
/* create index of used UIDs */
if (pwd->pw_uid <= uid_max) {
used_uids[pwd->pw_uid] = true;
}
/* create index of used UIDs */
if (pwd->pw_uid >= uid_min
&& pwd->pw_uid <= uid_max) {
used_uids[pwd->pw_uid] = true;
}
}
/*
* If a user (resp. system user) with UID equal to UID_MAX (resp.
* UID_MIN) exists, the above algorithm will give us UID_MAX+1
* (resp. UID_MIN-1) even if not unique. Search for the first free
* UID starting with UID_MIN (resp. UID_MAX).
*/
if (sys_user) {
if (user_id < uid_min) {
for (user_id = uid_max; user_id >= uid_min; user_id--) {
if (false == used_uids[user_id]) {
break;
}
}
if (user_id < uid_min ) {
fprintf (stderr,
_("%s: Can't get unique system UID (no more available UIDs)\n"),
Prog);
SYSLOG ((LOG_WARN,
"no more available UID on the system"));
/*
* For system users, we want to start from the
* top of the range and work downwards.
*/
/*
* At the conclusion of the pw_next() search, we will either
* have a presumed-free UID or we will be at UID_MIN - 1.
*/
if (lowest_found < uid_min) {
/*
* In this case, an UID is in use at UID_MIN.
*
* We will reset the search to UID_MAX and proceed down
* through all the UIDs (skipping those we detected with
* used_uids) for a free one. It is a known issue that
* this may result in reusing a previously-deleted UID,
* so administrators should be instructed to use this
* auto-detection with care (and prefer to assign UIDs
* explicitly).
*/
lowest_found = uid_max;
}
/* Search through all of the IDs in the range */
for (id = lowest_found; id >= uid_min; id--) {
result = check_uid (id, uid_min, uid_max, used_uids);
if (result == 0) {
/* This UID is available. Return it. */
*uid = id;
free (used_uids);
return -1;
return 0;
} else if (result == EEXIST) {
/* This UID is in use, we'll continue to the next */
} else {
/*
* An unexpected error occurred.
*
* Only report it the first time to avoid spamming
* the logs
*
*/
if (!nospam) {
fprintf (stderr,
_("%s: Can't get unique system UID (%s). "
"Suppressing additional messages.\n"),
Prog, strerror (result));
SYSLOG ((LOG_ERR,
"Error checking available UIDs: %s",
strerror (result)));
nospam = 1;
}
/*
* We will continue anyway. Hopefully a later UID
* will work properly.
*/
}
}
} else {
if (user_id > uid_max) {
for (user_id = uid_min; user_id <= uid_max; user_id++) {
if (false == used_uids[user_id]) {
break;
/*
* If we get all the way through the loop, try again from UID_MAX,
* unless that was where we previously started. (NOTE: the worst-case
* scenario here is that we will run through (UID_MAX - UID_MIN - 1)
* cycles *again* if we fall into this case with lowest_found as
* UID_MAX - 1, all users in the range in use and maintained by
* network services such as LDAP.)
*/
if (lowest_found != uid_max) {
for (id = uid_max; id >= uid_min; id--) {
result = check_uid (id, uid_min, uid_max, used_uids);
if (result == 0) {
/* This UID is available. Return it. */
*uid = id;
free (used_uids);
return 0;
} else if (result == EEXIST) {
/* This UID is in use, we'll continue to the next */
} else {
/*
* An unexpected error occurred.
*
* Only report it the first time to avoid spamming
* the logs
*
*/
if (!nospam) {
fprintf (stderr,
_("%s: Can't get unique system UID (%s). "
"Suppressing additional messages.\n"),
Prog, strerror (result));
SYSLOG((LOG_ERR,
"Error checking available UIDs: %s",
strerror (result)));
nospam = 1;
}
/*
* We will continue anyway. Hopefully a later UID
* will work properly.
*/
}
}
if (user_id > uid_max) {
fprintf (stderr,
_("%s: Can't get unique UID (no more available UIDs)\n"),
Prog);
SYSLOG ((LOG_WARN, "no more available UID on the system"));
}
} else { /* !sys_user */
/*
* For non-system users, we want to start from the
* bottom of the range and work upwards.
*/
/*
* At the conclusion of the pw_next() search, we will either
* have a presumed-free UID or we will be at UID_MAX + 1.
*/
if (highest_found > uid_max) {
/*
* In this case, a UID is in use at UID_MAX.
*
* We will reset the search to UID_MIN and proceed up
* through all the UIDs (skipping those we detected with
* used_uids) for a free one. It is a known issue that
* this may result in reusing a previously-deleted UID,
* so administrators should be instructed to use this
* auto-detection with care (and prefer to assign UIDs
* explicitly).
*/
highest_found = uid_min;
}
/* Search through all of the IDs in the range */
for (id = highest_found; id <= uid_max; id++) {
result = check_uid (id, uid_min, uid_max, used_uids);
if (result == 0) {
/* This UID is available. Return it. */
*uid = id;
free (used_uids);
return -1;
return 0;
} else if (result == EEXIST) {
/* This UID is in use, we'll continue to the next */
} else {
/*
* An unexpected error occurred.
*
* Only report it the first time to avoid spamming
* the logs
*
*/
if (!nospam) {
fprintf (stderr,
_("%s: Can't get unique UID (%s). "
"Suppressing additional messages.\n"),
Prog, strerror (result));
SYSLOG ((LOG_ERR,
"Error checking available UIDs: %s",
strerror (result)));
nospam = 1;
}
/*
* We will continue anyway. Hopefully a later UID
* will work properly.
*/
}
}
/*
* If we get all the way through the loop, try again from UID_MIN,
* unless that was where we previously started. (NOTE: the worst-case
* scenario here is that we will run through (UID_MAX - UID_MIN - 1)
* cycles *again* if we fall into this case with highest_found as
* UID_MIN + 1, all users in the range in use and maintained by
* network services such as LDAP.)
*/
if (highest_found != uid_min) {
for (id = uid_min; id <= uid_max; id++) {
result = check_uid (id, uid_min, uid_max, used_uids);
if (result == 0) {
/* This UID is available. Return it. */
*uid = id;
free (used_uids);
return 0;
} else if (result == EEXIST) {
/* This UID is in use, we'll continue to the next */
} else {
/*
* An unexpected error occurred.
*
* Only report it the first time to avoid spamming
* the logs
*
*/
if (!nospam) {
fprintf (stderr,
_("%s: Can't get unique UID (%s). "
"Suppressing additional messages.\n"),
Prog, strerror (result));
SYSLOG ((LOG_ERR,
"Error checking available UIDs: %s",
strerror (result)));
nospam = 1;
}
/*
* We will continue anyway. Hopefully a later UID
* will work properly.
*/
}
}
}
}
/* The code reached here and found no available IDs in the range */
fprintf (stderr,
_("%s: Can't get unique UID (no more available UIDs)\n"),
Prog);
SYSLOG ((LOG_WARN, "no more available UIDs on the system"));
free (used_uids);
*uid = user_id;
return 0;
return -1;
}

View File

@@ -66,7 +66,7 @@
#endif
/* Remap normal yacc parser interface names (yyparse, yylex, yyerror, etc),
as well as gratuitiously global symbol names, so we can have multiple
as well as gratuitously global symbol names, so we can have multiple
yacc generated parsers in the same program. Note that these are only
the variables produced by yacc. If other parser generators (bison,
byacc, etc) produce additional global names that conflict at link time,

89
libmisc/gettime.c Normal file
View File

@@ -0,0 +1,89 @@
/*
* Copyright (c) 2017, Chris Lamb
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the copyright holders or contributors may not be used to
* endorse or promote products derived from this software without
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <config.h>
#ident "$Id$"
#include <errno.h>
#include <limits.h>
#include <stdio.h>
#include "defines.h"
#include "prototypes.h"
/*
* gettime() returns the time as the number of seconds since the Epoch
*
* Like time(), gettime() returns the time as the number of seconds since the
* Epoch, 1970-01-01 00:00:00 +0000 (UTC), except that if the SOURCE_DATE_EPOCH
* environment variable is exported it will use that instead.
*/
/*@observer@*/time_t gettime ()
{
char *endptr;
char *source_date_epoch;
time_t fallback;
unsigned long long epoch;
fallback = time (NULL);
source_date_epoch = shadow_getenv ("SOURCE_DATE_EPOCH");
if (!source_date_epoch)
return fallback;
errno = 0;
epoch = strtoull (source_date_epoch, &endptr, 10);
if ((errno == ERANGE && (epoch == ULLONG_MAX || epoch == 0))
|| (errno != 0 && epoch == 0)) {
fprintf (stderr,
_("Environment variable $SOURCE_DATE_EPOCH: strtoull: %s\n"),
strerror(errno));
} else if (endptr == source_date_epoch) {
fprintf (stderr,
_("Environment variable $SOURCE_DATE_EPOCH: No digits were found: %s\n"),
endptr);
} else if (*endptr != '\0') {
fprintf (stderr,
_("Environment variable $SOURCE_DATE_EPOCH: Trailing garbage: %s\n"),
endptr);
} else if (epoch > ULONG_MAX) {
fprintf (stderr,
_("Environment variable $SOURCE_DATE_EPOCH: value must be smaller than or equal to %lu but was found to be: %llu\n"),
ULONG_MAX, epoch);
} else if (epoch > fallback) {
fprintf (stderr,
_("Environment variable $SOURCE_DATE_EPOCH: value must be smaller than or equal to the current time (%lu) but was found to be: %llu\n"),
fallback, epoch);
} else {
/* Valid */
return (time_t)epoch;
}
return fallback;
}

View File

@@ -36,6 +36,10 @@
#include <stdio.h>
#include "prototypes.h"
#include "idmapping.h"
#include <sys/prctl.h>
#if HAVE_SYS_CAPABILITY_H
#include <sys/capability.h>
#endif
struct map_range *get_map_ranges(int ranges, int argc, char **argv)
{
@@ -119,9 +123,23 @@ struct map_range *get_map_ranges(int ranges, int argc, char **argv)
*/
#define ULONG_DIGITS ((((sizeof(unsigned long) * CHAR_BIT) + 9)/10)*3)
/*
* The ruid refers to the caller's uid and is used to reset the effective uid
* back to the callers real uid.
* This clutch mainly exists for setuid-based new{g,u}idmap binaries that are
* called in contexts where all capabilities other than the necessary
* CAP_SET{G,U}ID capabilities are dropped. Since the kernel will require
* assurance that the caller holds CAP_SYS_ADMIN over the target user namespace
* the only way it can confirm is in this case is if the effective uid is
* equivalent to the uid owning the target user namespace.
* Note, we only support this when a) new{g,u}idmap is not called by root and
* b) if the caller's uid and the uid retrieved via system appropriate means
* (shadow file or other) are identical. Specifically, this does not support
* when the root user calls the new{g,u}idmap binary for an unprivileged user.
* If this is wanted: use file capabilities!
*/
void write_mapping(int proc_dir_fd, int ranges, struct map_range *mappings,
const char *map_file)
const char *map_file, uid_t ruid)
{
int idx;
struct map_range *mapping;
@@ -129,6 +147,43 @@ void write_mapping(int proc_dir_fd, int ranges, struct map_range *mappings,
char *buf, *pos;
int fd;
#if HAVE_SYS_CAPABILITY_H
int cap;
struct __user_cap_header_struct hdr = {_LINUX_CAPABILITY_VERSION_3, 0};
struct __user_cap_data_struct data[2] = {{0}};
if (strcmp(map_file, "uid_map") == 0) {
cap = CAP_SETUID;
} else if (strcmp(map_file, "gid_map") == 0) {
cap = CAP_SETGID;
} else {
fprintf(stderr, _("%s: Invalid map file %s specified\n"), Prog, map_file);
exit(EXIT_FAILURE);
}
/* Align setuid- and fscaps-based new{g,u}idmap behavior. */
if (geteuid() == 0 && geteuid() != ruid) {
if (prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0) < 0) {
fprintf(stderr, _("%s: Could not prctl(PR_SET_KEEPCAPS)\n"), Prog);
exit(EXIT_FAILURE);
}
if (seteuid(ruid) < 0) {
fprintf(stderr, _("%s: Could not seteuid to %d\n"), Prog, ruid);
exit(EXIT_FAILURE);
}
}
/* Lockdown new{g,u}idmap by dropping all unneeded capabilities. */
memset(data, 0, sizeof(data));
data[0].effective = CAP_TO_MASK(cap);
data[0].permitted = data[0].effective;
if (capset(&hdr, data) < 0) {
fprintf(stderr, _("%s: Could not set caps\n"), Prog);
exit(EXIT_FAILURE);
}
#endif
bufsize = ranges * ((ULONG_DIGITS + 1) * 3);
pos = buf = xmalloc(bufsize);
@@ -148,7 +203,7 @@ void write_mapping(int proc_dir_fd, int ranges, struct map_range *mappings,
pos += written;
}
/* Write the mapping to the maping file */
/* Write the mapping to the mapping file */
fd = openat(proc_dir_fd, map_file, O_WRONLY);
if (fd < 0) {
fprintf(stderr, _("%s: open of %s failed: %s\n"),

View File

@@ -38,7 +38,7 @@ struct map_range {
extern struct map_range *get_map_ranges(int ranges, int argc, char **argv);
extern void write_mapping(int proc_dir_fd, int ranges,
struct map_range *mappings, const char *map_file);
struct map_range *mappings, const char *map_file, uid_t ruid);
#endif /* _ID_MAPPING_H_ */

View File

@@ -268,6 +268,9 @@ static /*@observer@*//*@null@*/const char *obscure_msg (
#ifdef USE_SHA_CRYPT
|| (strcmp (result, "SHA256") == 0)
|| (strcmp (result, "SHA512") == 0)
#endif
#ifdef USE_BCRYPT
|| (strcmp (result, "BCRYPT") == 0)
#endif
) {
return NULL;

View File

@@ -134,7 +134,7 @@ failed_conversation:
*
* Return 0 on success, 1 on failure.
*/
int do_pam_passwd_non_interractive (const char *pam_service,
int do_pam_passwd_non_interactive (const char *pam_service,
const char *username,
const char* password)
{

347
libmisc/prefix_flag.c Normal file
View File

@@ -0,0 +1,347 @@
/*
* Copyright (c) 2011 , Julian Pidancet
* Copyright (c) 2011 , Nicolas François
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. The name of the copyright holders or contributors may not be used to
* endorse or promote products derived from this software without
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <config.h>
#ident "$Id$"
#include <stdio.h>
#include <assert.h>
#include "defines.h"
#include "prototypes.h"
/*@-exitarg@*/
#include "exitcodes.h"
#include "groupio.h"
#include "pwio.h"
#ifdef SHADOWGRP
#include "sgroupio.h"
#endif
#include "shadowio.h"
#ifdef ENABLE_SUBIDS
#include "subordinateio.h"
#endif /* ENABLE_SUBIDS */
#include "getdef.h"
static char *passwd_db_file = NULL;
static char *spw_db_file = NULL;
static char *group_db_file = NULL;
static char *sgroup_db_file = NULL;
static char *suid_db_file = NULL;
static char *sgid_db_file = NULL;
static char *def_conf_file = NULL;
static FILE* fp_pwent = NULL;
static FILE* fp_grent = NULL;
/*
* process_prefix_flag - prefix all paths if given the --prefix option
*
* This shall be called before accessing the passwd, group, shadow,
* gshadow, useradd's default, login.defs files (non exhaustive list)
* or authenticating the caller.
*
* The audit, syslog, or locale files shall be open before
*/
extern const char* process_prefix_flag (const char* short_opt, int argc, char **argv)
{
/*
* Parse the command line options.
*/
int i;
const char *prefix = NULL;
for (i = 0; i < argc; i++) {
if ( (strcmp (argv[i], "--prefix") == 0)
|| (strcmp (argv[i], short_opt) == 0)) {
if (NULL != prefix) {
fprintf (stderr,
_("%s: multiple --prefix options\n"),
Prog);
exit (E_BAD_ARG);
}
if (i + 1 == argc) {
fprintf (stderr,
_("%s: option '%s' requires an argument\n"),
Prog, argv[i]);
exit (E_BAD_ARG);
}
prefix = argv[i + 1];
}
}
if (prefix != NULL) {
if ( prefix[0] == '\0' || !strcmp(prefix, "/"))
return ""; /* if prefix is "/" then we ignore the flag option */
/* should we prevent symbolic link from being used as a prefix? */
size_t len;
len = strlen(prefix) + strlen(PASSWD_FILE) + 2;
passwd_db_file = xmalloc(len);
snprintf(passwd_db_file, len, "%s/%s", prefix, PASSWD_FILE);
pw_setdbname(passwd_db_file);
len = strlen(prefix) + strlen(GROUP_FILE) + 2;
group_db_file = xmalloc(len);
snprintf(group_db_file, len, "%s/%s", prefix, GROUP_FILE);
gr_setdbname(group_db_file);
#ifdef SHADOWGRP
len = strlen(prefix) + strlen(SGROUP_FILE) + 2;
sgroup_db_file = xmalloc(len);
snprintf(sgroup_db_file, len, "%s/%s", prefix, SGROUP_FILE);
sgr_setdbname(sgroup_db_file);
#endif
#ifdef USE_NIS
__setspNIS(0); /* disable NIS for now, at least until it is properly supporting a "prefix" */
#endif
len = strlen(prefix) + strlen(SHADOW_FILE) + 2;
spw_db_file = xmalloc(len);
snprintf(spw_db_file, len, "%s/%s", prefix, SHADOW_FILE);
spw_setdbname(spw_db_file);
#ifdef ENABLE_SUBIDS
len = strlen(prefix) + strlen("/etc/subuid") + 2;
suid_db_file = xmalloc(len);
snprintf(suid_db_file, len, "%s/%s", prefix, "/etc/subuid");
sub_uid_setdbname(suid_db_file);
len = strlen(prefix) + strlen("/etc/subgid") + 2;
sgid_db_file = xmalloc(len);
snprintf(sgid_db_file, len, "%s/%s", prefix, "/etc/subgid");
sub_gid_setdbname(sgid_db_file);
#endif
#ifdef USE_ECONF
setdef_config_file(prefix);
#else
len = strlen(prefix) + strlen("/etc/login.defs") + 2;
def_conf_file = xmalloc(len);
snprintf(def_conf_file, len, "%s/%s", prefix, "/etc/login.defs");
setdef_config_file(def_conf_file);
#endif
}
if (prefix == NULL)
return "";
return prefix;
}
extern struct group *prefix_getgrnam(const char *name)
{
if (group_db_file) {
FILE* fg;
struct group * grp = NULL;
fg = fopen(group_db_file, "rt");
if(!fg)
return NULL;
while(grp = fgetgrent(fg)) {
if(!strcmp(name, grp->gr_name))
break;
}
fclose(fg);
return grp;
}
return getgrnam(name);
}
extern struct group *prefix_getgrgid(gid_t gid)
{
if (group_db_file) {
FILE* fg;
struct group * grp = NULL;
fg = fopen(group_db_file, "rt");
if(!fg)
return NULL;
while(grp = fgetgrent(fg)) {
if(gid == grp->gr_gid)
break;
}
fclose(fg);
return grp;
}
return getgrgid(gid);
}
extern struct passwd *prefix_getpwuid(uid_t uid)
{
if (passwd_db_file) {
FILE* fg;
struct passwd *pwd = NULL;
fg = fopen(passwd_db_file, "rt");
if(!fg)
return NULL;
while(pwd = fgetpwent(fg)) {
if(uid == pwd->pw_uid)
break;
}
fclose(fg);
return pwd;
}
else {
return getpwuid(uid);
}
}
extern struct passwd *prefix_getpwnam(const char* name)
{
if (passwd_db_file) {
FILE* fg;
struct passwd *pwd = NULL;
fg = fopen(passwd_db_file, "rt");
if(!fg)
return NULL;
while(pwd = fgetpwent(fg)) {
if(!strcmp(name, pwd->pw_name))
break;
}
fclose(fg);
return pwd;
}
else {
return getpwnam(name);
}
}
extern struct spwd *prefix_getspnam(const char* name)
{
if (spw_db_file) {
FILE* fg;
struct spwd *sp = NULL;
fg = fopen(spw_db_file, "rt");
if(!fg)
return NULL;
while(sp = fgetspent(fg)) {
if(!strcmp(name, sp->sp_namp))
break;
}
fclose(fg);
return sp;
}
else {
return getspnam(name);
}
}
extern void prefix_setpwent()
{
if(!passwd_db_file) {
setpwent();
return;
}
if (fp_pwent)
fclose (fp_pwent);
fp_pwent = fopen(passwd_db_file, "rt");
if(!fp_pwent)
return;
}
extern struct passwd* prefix_getpwent()
{
if(!passwd_db_file) {
return getpwent();
}
return fgetpwent(fp_pwent);
}
extern void prefix_endpwent()
{
if(!passwd_db_file) {
endpwent();
return;
}
if (fp_pwent)
fclose(fp_pwent);
fp_pwent = NULL;
}
extern void prefix_setgrent()
{
if(!group_db_file) {
setgrent();
return;
}
if (fp_grent)
fclose (fp_grent);
fp_grent = fopen(group_db_file, "rt");
if(!fp_grent)
return;
}
extern struct group* prefix_getgrent()
{
if(!group_db_file) {
return getgrent();
}
return fgetgrent(fp_grent);
}
extern void prefix_endgrent()
{
if(!group_db_file) {
endgrent();
return;
}
if (fp_grent)
fclose(fp_grent);
fp_grent = NULL;
}
extern struct group *prefix_getgr_nam_gid(const char *grname)
{
long long int gid;
char *endptr;
struct group *g;
if (NULL == grname) {
return NULL;
}
if (group_db_file) {
errno = 0;
gid = strtoll (grname, &endptr, 10);
if ( ('\0' != *grname)
&& ('\0' == *endptr)
&& (ERANGE != errno)
&& (gid == (gid_t)gid)) {
return prefix_getgrgid ((gid_t) gid);
}
g = prefix_getgrnam (grname);
return g ? __gr_dup(g) : NULL;
}
else
return getgr_nam_gid(grname);
}

View File

@@ -40,7 +40,6 @@
#include "prototypes.h"
#include "defines.h"
#include <pwd.h>
extern time_t time (time_t *);
/*
* pwd_to_spwd - create entries for new spwd structure
@@ -66,7 +65,7 @@ struct spwd *pwd_to_spwd (const struct passwd *pw)
*/
sp.sp_min = 0;
sp.sp_max = (10000L * DAY) / SCALE;
sp.sp_lstchg = (long) time ((time_t *) 0) / SCALE;
sp.sp_lstchg = (long) gettime () / SCALE;
if (0 == sp.sp_lstchg) {
/* Better disable aging than requiring a password
* change */

View File

@@ -22,10 +22,16 @@
/* local function prototypes */
static void seedRNG (void);
static /*@observer@*/const char *gensalt (size_t salt_size);
#ifdef USE_SHA_CRYPT
#if defined(USE_SHA_CRYPT) || defined(USE_BCRYPT)
static long shadow_random (long min, long max);
#endif /* USE_SHA_CRYPT || USE_BCRYPT */
#ifdef USE_SHA_CRYPT
static /*@observer@*/const char *SHA_salt_rounds (/*@null@*/int *prefered_rounds);
#endif /* USE_SHA_CRYPT */
#ifdef USE_BCRYPT
static /*@observer@*/const char *gensalt_bcrypt (void);
static /*@observer@*/const char *BCRYPT_salt_rounds (/*@null@*/int *prefered_rounds);
#endif /* USE_BCRYPT */
#ifndef HAVE_L64A
static /*@observer@*/char *l64a(long value)
@@ -79,8 +85,16 @@ static void seedRNG (void)
* Add the salt prefix.
*/
#define MAGNUM(array,ch) (array)[0]=(array)[2]='$',(array)[1]=(ch),(array)[3]='\0'
#ifdef USE_BCRYPT
/*
* Using the Prefix $2a$ to enable an anti-collision safety measure in musl libc.
* Negatively affects a subset of passwords containing the '\xff' character,
* which is not valid UTF-8 (so "unlikely to cause much annoyance").
*/
#define BCRYPTMAGNUM(array) (array)[0]=(array)[3]='$',(array)[1]='2',(array)[2]='a',(array)[4]='\0'
#endif /* USE_BCRYPT */
#ifdef USE_SHA_CRYPT
#if defined(USE_SHA_CRYPT) || defined(USE_BCRYPT)
/* It is not clear what is the maximum value of random().
* We assume 2^31-1.*/
#define RANDOM_MAX 0x7FFFFFFF
@@ -105,14 +119,15 @@ static long shadow_random (long min, long max)
}
return ret;
}
#endif /* USE_SHA_CRYPT || USE_BCRYPT */
#ifdef USE_SHA_CRYPT
/* Default number of rounds if not explicitly specified. */
#define ROUNDS_DEFAULT 5000
/* Minimum number of rounds. */
#define ROUNDS_MIN 1000
/* Maximum number of rounds. */
#define ROUNDS_MAX 999999999
/*
* Return a salt prefix specifying the rounds number for the SHA crypt methods.
*/
@@ -165,6 +180,89 @@ static /*@observer@*/const char *SHA_salt_rounds (/*@null@*/int *prefered_rounds
}
#endif /* USE_SHA_CRYPT */
#ifdef USE_BCRYPT
/* Default number of rounds if not explicitly specified. */
#define B_ROUNDS_DEFAULT 13
/* Minimum number of rounds. */
#define B_ROUNDS_MIN 4
/* Maximum number of rounds. */
#define B_ROUNDS_MAX 31
/*
* Return a salt prefix specifying the rounds number for the BCRYPT method.
*/
static /*@observer@*/const char *BCRYPT_salt_rounds (/*@null@*/int *prefered_rounds)
{
static char rounds_prefix[4]; /* Max size: 31$ */
long rounds;
if (NULL == prefered_rounds) {
long min_rounds = getdef_long ("BCRYPT_MIN_ROUNDS", -1);
long max_rounds = getdef_long ("BCRYPT_MAX_ROUNDS", -1);
if (((-1 == min_rounds) && (-1 == max_rounds)) || (0 == *prefered_rounds)) {
rounds = B_ROUNDS_DEFAULT;
}
else {
if (-1 == min_rounds) {
min_rounds = max_rounds;
}
if (-1 == max_rounds) {
max_rounds = min_rounds;
}
if (min_rounds > max_rounds) {
max_rounds = min_rounds;
}
rounds = shadow_random (min_rounds, max_rounds);
}
} else {
rounds = *prefered_rounds;
}
/*
* Sanity checks.
* Use 19 as an upper bound for now,
* because musl doesn't allow rounds >= 20.
*/
if (rounds < B_ROUNDS_MIN) {
rounds = B_ROUNDS_MIN;
}
if (rounds > 19) {
/* rounds = B_ROUNDS_MAX; */
rounds = 19;
}
(void) snprintf (rounds_prefix, sizeof rounds_prefix,
"%2.2ld$", rounds);
return rounds_prefix;
}
#define BCRYPT_SALT_SIZE 22
/*
* Generate a 22 character salt string for bcrypt.
*/
static /*@observer@*/const char *gensalt_bcrypt (void)
{
static char salt[32];
salt[0] = '\0';
seedRNG ();
strcat (salt, l64a (random()));
do {
strcat (salt, l64a (random()));
} while (strlen (salt) < BCRYPT_SALT_SIZE);
salt[BCRYPT_SALT_SIZE] = '\0';
return salt;
}
#endif /* USE_BCRYPT */
/*
* Generate salt of size salt_size.
*/
@@ -230,6 +328,11 @@ static /*@observer@*/const char *gensalt (size_t salt_size)
if (0 == strcmp (method, "MD5")) {
MAGNUM(result, '1');
#ifdef USE_BCRYPT
} else if (0 == strcmp (method, "BCRYPT")) {
BCRYPTMAGNUM(result);
strcat(result, BCRYPT_salt_rounds((int *)arg));
#endif /* USE_BCRYPT */
#ifdef USE_SHA_CRYPT
} else if (0 == strcmp (method, "SHA256")) {
MAGNUM(result, '5');
@@ -252,8 +355,18 @@ static /*@observer@*/const char *gensalt (size_t salt_size)
* Concatenate a pseudo random salt.
*/
assert (sizeof (result) > strlen (result) + salt_len);
strncat (result, gensalt (salt_len),
sizeof (result) - strlen (result) - 1);
#ifdef USE_BCRYPT
if (0 == strcmp (method, "BCRYPT")) {
strncat (result, gensalt_bcrypt (),
sizeof (result) - strlen (result) - 1);
return result;
} else {
#endif /* USE_BCRYPT */
strncat (result, gensalt (salt_len),
sizeof (result) - strlen (result) - 1);
#ifdef USE_BCRYPT
}
#endif /* USE_BCRYPT */
return result;
}

View File

@@ -171,7 +171,7 @@ static void read_env_file (const char *filename)
cp++;
goto d_quote;
}
eise if (*cp == '\0') {
else if (*cp == '\0') {
/* end of string */
goto finished;
} else {

View File

@@ -126,7 +126,7 @@ static char *date_formats[] = {
#else
/*
* days and juldays are used to compute the number of days in the
* current month, and the cummulative number of days in the preceding
* current month, and the cumulative number of days in the preceding
* months. they are declared so that january is 1, not 0.
*/
static short days[13] = { 0,

View File

@@ -170,6 +170,9 @@ static int user_busy_processes (const char *name, uid_t uid)
proc = opendir ("/proc");
if (proc == NULL) {
perror ("opendir /proc");
#ifdef ENABLE_SUBIDS
sub_uid_close();
#endif
return 0;
}
if (stat ("/", &sbroot) != 0) {

View File

@@ -35,10 +35,10 @@
#include "defines.h"
#include "prototypes.h"
#include <utmp.h>
#ifdef USE_UTMPX
#include <utmpx.h>
#else
#include <utmp.h>
#endif
#include <assert.h>
@@ -88,7 +88,7 @@ static bool is_my_tty (const char *tty)
* session
*
* The utmp file is scanned for an entry with the same process ID.
* The line enterred by the *getty / telnetd, etc. should also match
* The line entered by the *getty / telnetd, etc. should also match
* the current terminal.
*
* When an entry is returned by get_current_utmp, and if the utmp
@@ -97,6 +97,7 @@ static bool is_my_tty (const char *tty)
*
* Return NULL if no entries exist in utmp for the current process.
*/
#ifndef USE_UTMPX
/*@null@*/ /*@only@*/struct utmp *get_current_utmp (void)
{
struct utmp *ut;
@@ -130,6 +131,36 @@ static bool is_my_tty (const char *tty)
return ret;
}
#else
/*@null@*/ /*@only*/struct utmpx *get_current_utmp(void)
{
struct utmpx *ut;
struct utmpx *ret = NULL;
setutxent ();
/* Find the utmpx entry for this PID. */
while ((ut = getutxent ()) != NULL) {
if ( (ut->ut_pid == getpid ())
&& ('\0' != ut->ut_id[0])
&& ( (LOGIN_PROCESS == ut->ut_type)
|| (USER_PROCESS == ut->ut_type))
&& is_my_tty (ut->ut_line)) {
break;
}
}
if (NULL != ut) {
ret = (struct utmpx *) xmalloc (sizeof (*ret));
memcpy (ret, ut, sizeof (*ret));
}
endutxent ();
return ret;
}
#endif
#ifndef USE_PAM
/*
@@ -166,6 +197,7 @@ static void updwtmpx (const char *filename, const struct utmpx *utx)
#endif /* ! USE_PAM */
#ifndef USE_UTMPX
/*
* prepare_utmp - prepare an utmp entry so that it can be logged in a
* utmp/wtmp file.
@@ -325,14 +357,14 @@ int setutmp (struct utmp *ut)
return err;
}
#ifdef USE_UTMPX
#else
/*
* prepare_utmpx - the UTMPX version for prepare_utmp
*/
/*@only@*/struct utmpx *prepare_utmpx (const char *name,
const char *line,
const char *host,
/*@null@*/const struct utmp *ut)
/*@null@*/const struct utmpx *ut)
{
struct timeval tv;
char *hostname = NULL;
@@ -398,7 +430,7 @@ int setutmp (struct utmp *ut)
struct sockaddr_in *sa =
(struct sockaddr_in *) info->ai_addr;
#ifdef HAVE_STRUCT_UTMPX_UT_ADDR
memcpy (utxent->ut_addr,
memcpy (&utxent->ut_addr,
&(sa->sin_addr),
MIN (sizeof (utxent->ut_addr),
sizeof (sa->sin_addr)));

View File

@@ -41,7 +41,6 @@ man_MANS = \
man1/sg.1 \
man3/shadow.3 \
man5/shadow.5 \
man1/su.1 \
man5/suauth.5 \
man8/useradd.8 \
man8/userdel.8 \
@@ -54,6 +53,10 @@ man_nopam = \
man5/login.access.5 \
man5/porttime.5
if WITH_SU
man_MANS += man1/su.1
endif
if !USE_PAM
man_MANS += $(man_nopam)
endif
@@ -137,6 +140,7 @@ login_defs_v = \
ISSUE_FILE.xml \
KILLCHAR.xml \
LASTLOG_ENAB.xml \
LASTLOG_UID_MAX.xml \
LOGIN_RETRIES.xml \
LOGIN_STRING.xml \
LOGIN_TIMEOUT.xml \
@@ -215,5 +219,4 @@ $(man_MANS):
@echo "Error: you need to run configure with '--enable-man'"
@echo " in order to regenerate man pages."
@echo ""
@false
endif

10
man/README.md Normal file
View File

@@ -0,0 +1,10 @@
The [official releases](https://github.com/shadow-maint/shadow/releases) ship
with pre-built manpages.
The content of the man pages however is dependent on compile flags. So the
pre-built ones might not fit your version of shadow. To build them yourself use
`--enable-man`. Furthermore the following build requirements will be needed:
- xsltproc
- docbook 4
- docbook stylesheets
- itstool

View File

@@ -83,7 +83,7 @@
The <command>chage</command> command changes the number of days between
password changes and the date of the last password change. This
information is used by the system to determine when a user must change
his/her password.
their password.
</para>
</refsect1>
@@ -131,6 +131,12 @@
<para>Display help message and exit.</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-i</option>, <option>--iso8601</option></term>
<listitem>
<para>When printing dates, use YYYY-MM-DD format.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<option>-I</option>, <option>--inactive</option>&nbsp;<replaceable>INACTIVE</replaceable>
@@ -168,7 +174,7 @@
<para>
Set the minimum number of days between password changes to
<replaceable>MIN_DAYS</replaceable>. A value of zero for this field
indicates that the user may change his/her password at any time.
indicates that the user may change their password at any time.
</para>
</listitem>
</varlistentry>
@@ -181,8 +187,8 @@
Set the maximum number of days during which a password is valid.
When <replaceable>MAX_DAYS</replaceable> plus
<replaceable>LAST_DAY</replaceable> is less than the current
day, the user will be required to change his/her password before
being able to use his/her account. This occurrence can be planned for
day, the user will be required to change their password before
being able to use their account. This occurrence can be planned for
in advance by use of the <option>-W</option> option, which
provides the user with advance warning.
</para>
@@ -214,7 +220,7 @@
Set the number of days of warning before a password change is
required. The <replaceable>WARN_DAYS</replaceable> option is the
number of days prior to the password expiring that a user will
be warned his/her password is about to expire.
be warned their password is about to expire.
</para>
</listitem>
</varlistentry>
@@ -235,7 +241,7 @@
</para>
<para>The <command>chage</command> command is restricted to the root
user, except for the <option>-l</option> option, which may be used by
an unprivileged user to determine when his/her password or account is due
an unprivileged user to determine when their password or account is due
to expire.
</para>
</refsect1>

View File

@@ -42,12 +42,11 @@ man1/% man3/% man5/% man8/%: %.xml-config Makefile config.xml
-nonet http://docbook.sourceforge.net/release/xsl/current/manpages/profile-docbook.xsl $<
clean-local:
for d in man1 man3 man5 man8; do [ -d $$d ] && rmdir $$d; done
rm -rf man1 man3 man5 man8
else
$(man_MANS):
@echo you need to run configure with --enable-man to generate man pages
@false
endif
man8/grpconv.8 man8/grpunconv.8 man8/pwunconv.8: man8/pwconv.8

View File

@@ -5,8 +5,19 @@ config.xml: ../config.xml.in
$(MAKE) -C .. config.xml
cp ../config.xml $@
%.xml: ../%.xml ../po/$(LANG).po
xml2po --expand-all-entities -l $(LANG) -p ../po/$(LANG).po -o $@ ../$@
messages.mo: ../po/$(LANG).po
msgfmt ../po/$(LANG).po -o messages.mo
login.defs.d:
ln -sf ../login.defs.d login.defs.d
%.xml: ../%.xml messages.mo login.defs.d
if grep -q SHADOW-CONFIG-HERE $< ; then \
sed -e 's/^<!-- SHADOW-CONFIG-HERE -->/<!ENTITY % config SYSTEM "config.xml">%config;/' $< > $@; \
else \
sed -e 's/^\(<!DOCTYPE .*docbookx.dtd"\)>/\1 [<!ENTITY % config SYSTEM "config.xml">%config;]>/' $< > $@; \
fi
itstool -d -l $(LANG) -m messages.mo -o . $@
sed -i 's:\(^<refentry .*\)>:\1 lang="$(LANG)">:' $@
include ../generate_mans.mak
@@ -14,7 +25,6 @@ include ../generate_mans.mak
else
$(man_MANS):
@echo you need to run configure with --enable-man to generate man pages
@false
endif
CLEANFILES = .xml2po.mo $(EXTRA_DIST) $(addsuffix .xml,$(EXTRA_DIST)) config.xml
CLEANFILES = messages.mo login.defs.d $(EXTRA_DIST) $(addsuffix .xml,$(EXTRA_DIST)) config.xml

View File

@@ -212,6 +212,23 @@
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<option>-P</option>, <option>--prefix</option>&nbsp;<replaceable>PREFIX_DIR</replaceable>
</term>
<listitem>
<para>
Apply changes in the <replaceable>PREFIX_DIR</replaceable>
directory and use the configuration files from the
<replaceable>PREFIX_DIR</replaceable> directory.
This option does not chroot and is intended for preparing
a cross-compilation target.
Some limitations: NIS and LDAP users/groups are not verified.
PAM authentication is using the host files.
No SELINUX support.
</para>
</listitem>
</varlistentry>
</variablelist>
</refsect1>

View File

@@ -109,6 +109,23 @@
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<option>-P</option>, <option>--prefix</option>&nbsp;<replaceable>PREFIX_DIR</replaceable>
</term>
<listitem>
<para>
Apply changes in the <replaceable>PREFIX_DIR</replaceable>
directory and use the configuration files from the
<replaceable>PREFIX_DIR</replaceable> directory.
This option does not chroot and is intended for preparing
a cross-compilation target.
Some limitations: NIS and LDAP users/groups are not verified.
PAM authentication is using the host files.
No SELINUX support.
</para>
</listitem>
</varlistentry>
</variablelist>
</refsect1>

View File

@@ -85,7 +85,7 @@
<title>DESCRIPTION</title>
<para>
The <command>groupmems</command> command allows a user to administer
his/her own group membership list without the requirement of
their own group membership list without the requirement of
superuser privileges. The <command>groupmems</command> utility is for
systems that configure its users to be in their own name sake primary
group (i.e., guest / guest).

View File

@@ -186,6 +186,23 @@
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<option>-P</option>, <option>--prefix</option>&nbsp;<replaceable>PREFIX_DIR</replaceable>
</term>
<listitem>
<para>
Apply changes in the <replaceable>PREFIX_DIR</replaceable>
directory and use the configuration files from the
<replaceable>PREFIX_DIR</replaceable> directory.
This option does not chroot and is intended for preparing
a cross-compilation target.
Some limitations: NIS and LDAP users/groups are not verified.
PAM authentication is using the host files.
No SELINUX support.
</para>
</listitem>
</varlistentry>
</variablelist>
</refsect1>
@@ -239,43 +256,61 @@
<varlistentry>
<term><replaceable>0</replaceable></term>
<listitem>
<para>success</para>
<para>E_SUCCESS: success</para>
</listitem>
</varlistentry>
<varlistentry>
<term><replaceable>2</replaceable></term>
<listitem>
<para>invalid command syntax</para>
<para>E_USAGE: invalid command syntax</para>
</listitem>
</varlistentry>
<varlistentry>
<term><replaceable>3</replaceable></term>
<listitem>
<para>invalid argument to option</para>
<para>E_BAD_ARG: invalid argument to option</para>
</listitem>
</varlistentry>
<varlistentry>
<term><replaceable>4</replaceable></term>
<listitem>
<para>specified group doesn't exist</para>
<para>E_GID_IN_USE: specified group doesn't exist</para>
</listitem>
</varlistentry>
<varlistentry>
<term><replaceable>6</replaceable></term>
<listitem>
<para>specified group doesn't exist</para>
<para>E_NOTFOUND: specified group doesn't exist</para>
</listitem>
</varlistentry>
<varlistentry>
<term><replaceable>9</replaceable></term>
<listitem>
<para>group name already in use</para>
<para>E_NAME_IN_USE: group name already in use</para>
</listitem>
</varlistentry>
<varlistentry>
<term><replaceable>10</replaceable></term>
<listitem>
<para>can't update group file</para>
<para>E_GRP_UPDATE: can't update group file</para>
</listitem>
</varlistentry>
<varlistentry>
<term><replaceable>11</replaceable></term>
<listitem>
<para>E_CLEANUP_SERVICE: can't setup cleanup service</para>
</listitem>
</varlistentry>
<varlistentry>
<term><replaceable>12</replaceable></term>
<listitem>
<para>E_PAM_USERNAME: can't determine your username for use with pam</para>
</listitem>
</varlistentry>
<varlistentry>
<term><replaceable>13</replaceable></term>
<listitem>
<para>E_PAM_ERROR: pam returned an error, see syslog facility id groupmod for the PAM error message</para>
</listitem>
</varlistentry>
</variablelist>

View File

@@ -31,6 +31,7 @@
-->
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
<!ENTITY LASTLOG_UID_MAX SYSTEM "login.defs.d/LASTLOG_UID_MAX.xml">
<!-- SHADOW-CONFIG-HERE -->
]>
<refentry id='lastlog.8'>
@@ -200,6 +201,18 @@
</para>
</refsect1>
<refsect1 id='configuration'>
<title>CONFIGURATION</title>
<para>
The following configuration variables in
<filename>/etc/login.defs</filename> change the behavior of this
tool:
</para>
<variablelist>
&LASTLOG_UID_MAX;
</variablelist>
</refsect1>
<refsect1 id='files'>
<title>FILES</title>
<variablelist>

View File

@@ -54,6 +54,7 @@
<!ENTITY ISSUE_FILE SYSTEM "login.defs.d/ISSUE_FILE.xml">
<!ENTITY KILLCHAR SYSTEM "login.defs.d/KILLCHAR.xml">
<!ENTITY LASTLOG_ENAB SYSTEM "login.defs.d/LASTLOG_ENAB.xml">
<!ENTITY LASTLOG_UID_MAX SYSTEM "login.defs.d/LASTLOG_UID_MAX.xml">
<!ENTITY LOG_OK_LOGINS SYSTEM "login.defs.d/LOG_OK_LOGINS.xml">
<!ENTITY LOG_UNKFAIL_ENAB SYSTEM "login.defs.d/LOG_UNKFAIL_ENAB.xml">
<!ENTITY LOGIN_RETRIES SYSTEM "login.defs.d/LOGIN_RETRIES.xml">
@@ -188,6 +189,7 @@
&ISSUE_FILE;
&KILLCHAR;
&LASTLOG_ENAB;
&LASTLOG_UID_MAX;
&LOG_OK_LOGINS;
&LOG_UNKFAIL_ENAB;
&LOGIN_RETRIES;
@@ -349,7 +351,12 @@
</listitem>
</varlistentry>
<!-- id: no variables -->
<!-- lastlog: no variables -->
<varlistentry>
<term>lastlog</term>
<listitem>
<para>LASTLOG_UID_MAX</para>
</listitem>
</varlistentry>
<varlistentry>
<term>login</term>
<listitem>
@@ -365,7 +372,7 @@
HUSHLOGIN_FILE
<phrase condition="no_pam">ISSUE_FILE</phrase>
KILLCHAR
<phrase condition="no_pam">LASTLOG_ENAB</phrase>
<phrase condition="no_pam">LASTLOG_ENAB LASTLOG_UID_MAX</phrase>
LOGIN_RETRIES
<phrase condition="no_pam">LOGIN_STRING</phrase>
LOGIN_TIMEOUT LOG_OK_LOGINS LOG_UNKFAIL_ENAB
@@ -474,6 +481,7 @@
<para>
CREATE_HOME
GID_MAX GID_MIN
LASTLOG_UID_MAX
MAIL_DIR MAX_MEMBERS_PER_GROUP
PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE
SUB_GID_COUNT SUB_GID_MAX SUB_GID_MIN
@@ -498,6 +506,7 @@
<term>usermod</term>
<listitem>
<para>
LASTLOG_UID_MAX
MAIL_DIR MAIL_FILE MAX_MEMBERS_PER_GROUP
<phrase condition="tcb">TCB_SYMLINKS USE_TCB</phrase>
</para>

View File

@@ -0,0 +1,46 @@
<!--
Copyright (c) 1991 - 1993, Julianne Frances Haugh
Copyright (c) 1991 - 1993, Chip Rosenthal
Copyright (c) 2007 - 2008, Nicolas François
Copyright (c) 2018, Red Hat, inc.
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. The name of the copyright holders or contributors may not be used to
endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-->
<varlistentry>
<term><option>LASTLOG_UID_MAX</option> (number)</term>
<listitem>
<para>
Highest user ID number for which the lastlog entries should be
updated. As higher user IDs are usually tracked by remote user
identity and authentication services there is no need to create
a huge sparse lastlog file for them.
</para>
<para>
No <option>LASTLOG_UID_MAX</option> option present in the configuration
means that there is no user ID limit for writing lastlog entries.
</para>
</listitem>
</varlistentry>

View File

@@ -42,7 +42,7 @@
<para>
The default values for <option>SUB_GID_MIN</option>,
<option>SUB_GID_MAX</option>, <option>SUB_GID_COUNT</option>
are respectively 100000, 600100000 and 10000.
are respectively 100000, 600100000 and 65536.
</para>
</listitem>
</varlistentry>

View File

@@ -42,7 +42,7 @@
<para>
The default values for <option>SUB_UID_MIN</option>,
<option>SUB_UID_MAX</option>, <option>SUB_UID_COUNT</option>
are respectively 100000, 600100000 and 10000.
are respectively 100000, 600100000 and 65536.
</para>
</listitem>
</varlistentry>

View File

@@ -266,6 +266,18 @@
<para>
The options which apply to the <command>newusers</command> command are:
</para>
<variablelist remap='IP'>
<varlistentry>
<term>
<option>--badname</option>&nbsp;
</term>
<listitem>
<para>
Allow names that do not conform to standards.
</para>
</listitem>
</varlistentry>
</variablelist>
<variablelist remap='IP' condition="no_pam">
<varlistentry>
<term><option>-c</option>, <option>--crypt-method</option></term>

View File

@@ -88,7 +88,7 @@
<title>DESCRIPTION</title>
<para>
The <command>passwd</command> command changes passwords for user accounts.
A normal user may only change the password for his/her own account, while
A normal user may only change the password for their own account, while
the superuser may change the password for any account.
<command>passwd</command> also changes the account or associated
password validity period.
@@ -97,7 +97,7 @@
<refsect2 id='password_changes'>
<title>Password Changes</title>
<para>
The user is first prompted for his/her old password, if one is
The user is first prompted for their old password, if one is
present. This password is then encrypted and compared against the
stored password. The user has only one chance to enter the correct
password. The superuser is permitted to bypass this step so that
@@ -206,7 +206,7 @@
<listitem>
<para>
Immediately expire an account's password. This in effect can
force a user to change his/her password at the user's next login.
force a user to change their password at the user's next login.
</para>
</listitem>
</varlistentry>
@@ -273,7 +273,7 @@
<para>
Set the minimum number of days between password changes to
<replaceable>MIN_DAYS</replaceable>. A value of zero for this field
indicates that the user may change his/her password at any time.
indicates that the user may change their password at any time.
</para>
</listitem>
</varlistentry>
@@ -349,7 +349,7 @@
Set the number of days of warning before a password change is
required. The <replaceable>WARN_DAYS</replaceable> option is
the number of days prior to the password expiring that a user
will be warned that his/her password is about to expire.
will be warned that their password is about to expire.
</para>
</listitem>
</varlistentry>
@@ -363,6 +363,11 @@
<replaceable>MAX_DAYS</replaceable>, the password is required
to be changed.
</para>
<para>
Passing the number <emphasis remap='I'>-1</emphasis> as
<replaceable>MAX_DAYS</replaceable> will remove checking a
password's validity.
</para>
</listitem>
</varlistentry>
</variablelist>

View File

@@ -98,24 +98,43 @@
</itemizedlist>
<para>
The encrypted password field may be blank, in which case no password
is required to authenticate as the specified login name. However,
some applications which read the <filename>/etc/passwd</filename> file
may decide not to permit <emphasis>any</emphasis> access at all if the
<emphasis>password</emphasis> field is blank. If the
<emphasis>password</emphasis> field is a lower-case <quote>x</quote>,
then the encrypted password is actually stored in the
If the <emphasis>password</emphasis> field is a lower-case
<quote>x</quote>, then the encrypted password is actually stored in the
<citerefentry><refentrytitle>shadow</refentrytitle>
<manvolnum>5</manvolnum></citerefentry> file instead; there
<emphasis>must</emphasis> be a corresponding line in the
<filename>/etc/shadow</filename> file, or else the user account is invalid.
If the <emphasis>password</emphasis> field is any other string, then
it will be treated as an encrypted password, as specified by
<citerefentry><refentrytitle>crypt</refentrytitle>
<manvolnum>3</manvolnum></citerefentry>.
</para>
<para>
The encrypted <emphasis>password</emphasis> field may be empty,
in which case no password is required to authenticate as the
specified login name. However, some applications which read the
<filename>/etc/passwd</filename> file may decide not to permit
<emphasis>any</emphasis> access at all if the
<emphasis>password</emphasis> field is blank.
</para>
<para>
A <emphasis>password</emphasis> field which starts with an
exclamation mark means that the password is locked. The
remaining characters on the line represent the
<emphasis>password</emphasis> field before the password was
locked.
</para>
<para>
Refer to <citerefentry><refentrytitle>crypt</refentrytitle>
<manvolnum>3</manvolnum></citerefentry> for details on how
this string is interpreted.
</para>
<para>
If the password field contains some string that is not a valid
result of <citerefentry><refentrytitle>crypt</refentrytitle>
<manvolnum>3</manvolnum></citerefentry>, for instance ! or *,
the user will not be able to use a unix password to log in
(but the user may log in the system by other means).
</para>
<para>
The comment field is used by various system utilities, such as
<citerefentry><refentrytitle>finger</refentrytitle>

View File

@@ -1023,7 +1023,7 @@ msgstr ""
#| "<option>-f</option>, <option>--inactive</option>&nbsp;"
#| "<replaceable>INACTIVE</replaceable>"
msgid ""
"<option>-v</option>, <option>--add-sub-uids</option>&nbsp;"
"<option>-v</option>, <option>--add-subuids</option>&nbsp;"
"<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>"
msgstr ""
"<option>-f</option>, <option>--inactive</option>&nbsp;<replaceable>INAKTIV</"
@@ -1052,7 +1052,7 @@ msgstr ""
#| "<option>-e</option>, <option>--expiredate</option>&nbsp;"
#| "<replaceable>EXPIRE_DATE</replaceable>"
msgid ""
"<option>-V</option>, <option>--del-sub-uids</option>&nbsp;"
"<option>-V</option>, <option>--del-subuids</option>&nbsp;"
"<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>"
msgstr ""
"<option>-e</option>, <option>--expiredate</option>&nbsp;"
@@ -1065,8 +1065,8 @@ msgstr ""
#: usermod.8.xml:409(para)
msgid ""
"This option may be specified multiple times to remove multiple ranges to a "
"users account. When both <option>--del-sub-uids</option> and <option>--add-"
"sub-uids</option> are specified, the removal of all subordinate uid ranges "
"users account. When both <option>--del-subuids</option> and <option>--add-"
"subuids</option> are specified, the removal of all subordinate uid ranges "
"happens before any subordinate uid range is added."
msgstr ""
@@ -1076,7 +1076,7 @@ msgstr ""
#| "<option>-f</option>, <option>--inactive</option>&nbsp;"
#| "<replaceable>INACTIVE</replaceable>"
msgid ""
"<option>-w</option>, <option>--add-sub-gids</option>&nbsp;"
"<option>-w</option>, <option>--add-subgids</option>&nbsp;"
"<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>"
msgstr ""
"<option>-f</option>, <option>--inactive</option>&nbsp;<replaceable>INAKTIV</"
@@ -1099,7 +1099,7 @@ msgstr ""
#| "<option>-e</option>, <option>--expiredate</option>&nbsp;"
#| "<replaceable>EXPIRE_DATE</replaceable>"
msgid ""
"<option>-W</option>, <option>--del-sub-gids</option>&nbsp;"
"<option>-W</option>, <option>--del-subgids</option>&nbsp;"
"<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>"
msgstr ""
"<option>-e</option>, <option>--expiredate</option>&nbsp;"
@@ -1112,8 +1112,8 @@ msgstr ""
#: usermod.8.xml:447(para)
msgid ""
"This option may be specified multiple times to remove multiple ranges to a "
"users account. When both <option>--del-sub-gids</option> and <option>--add-"
"sub-gids</option> are specified, the removal of all subordinate gid ranges "
"users account. When both <option>--del-subgids</option> and <option>--add-"
"subgids</option> are specified, the removal of all subordinate gid ranges "
"happens before any subordinate gid range is added."
msgstr ""
@@ -4307,7 +4307,7 @@ msgstr ""
#: passwd.1.xml:89(para)
msgid ""
"The <command>passwd</command> command changes passwords for user accounts. A "
"normal user may only change the password for his/her own account, while the "
"normal user may only change the password for their own account, while the "
"superuser may change the password for any account. <command>passwd</command> "
"also changes the account or associated password validity period."
msgstr ""
@@ -4318,7 +4318,7 @@ msgstr ""
#: passwd.1.xml:99(para)
msgid ""
"The user is first prompted for his/her old password, if one is present. This "
"The user is first prompted for their old password, if one is present. This "
"password is then encrypted and compared against the stored password. The "
"user has only one chance to enter the correct password. The superuser is "
"permitted to bypass this step so that forgotten passwords may be changed."
@@ -4435,7 +4435,7 @@ msgstr "<option>-e</option>, <option>--expire</option>"
#: passwd.1.xml:207(para)
msgid ""
"Immediately expire an account's password. This in effect can force a user to "
"change his/her password at the user's next login."
"change their password at the user's next login."
msgstr ""
"Angiv øjeblikkelig en kontos adgangskode som udløbet. Dette kan tvinge en "
"bruger til at ændre sin adgangskode ved brugerens næste logind."
@@ -4504,7 +4504,7 @@ msgstr ""
msgid ""
"Set the minimum number of days between password changes to "
"<replaceable>MIN_DAYS</replaceable>. A value of zero for this field "
"indicates that the user may change his/her password at any time."
"indicates that the user may change their password at any time."
msgstr ""
#: passwd.1.xml:291(term)
@@ -4553,7 +4553,7 @@ msgstr ""
msgid ""
"Set the number of days of warning before a password change is required. The "
"<replaceable>WARN_DAYS</replaceable> option is the number of days prior to "
"the password expiring that a user will be warned that his/her password is "
"the password expiring that a user will be warned that their password is "
"about to expire."
msgstr ""
@@ -6892,7 +6892,7 @@ msgstr "-l"
#: groupmems.8.xml:86(para)
msgid ""
"The <command>groupmems</command> command allows a user to administer his/her "
"The <command>groupmems</command> command allows a user to administer their "
"own group membership list without the requirement of superuser privileges. "
"The <command>groupmems</command> utility is for systems that configure its "
"users to be in their own name sake primary group (i.e., guest / guest)."
@@ -7975,7 +7975,7 @@ msgstr "ændr udløbsinformation om brugeradgangskode"
msgid ""
"The <command>chage</command> command changes the number of days between "
"password changes and the date of the last password change. This information "
"is used by the system to determine when a user must change his/her password."
"is used by the system to determine when a user must change their password."
msgstr ""
#: chage.1.xml:92(para)
@@ -8057,8 +8057,8 @@ msgstr ""
msgid ""
"Set the maximum number of days during which a password is valid. When "
"<replaceable>MAX_DAYS</replaceable> plus <replaceable>LAST_DAY</replaceable> "
"is less than the current day, the user will be required to change his/her "
"password before being able to use his/her account. This occurrence can be "
"is less than the current day, the user will be required to change their "
"password before being able to use their account. This occurrence can be "
"planned for in advance by use of the <option>-W</option> option, which "
"provides the user with advance warning."
msgstr ""
@@ -8080,7 +8080,7 @@ msgstr ""
msgid ""
"Set the number of days of warning before a password change is required. The "
"<replaceable>WARN_DAYS</replaceable> option is the number of days prior to "
"the password expiring that a user will be warned his/her password is about "
"the password expiring that a user will be warned their password is about "
"to expire."
msgstr ""
@@ -8105,7 +8105,7 @@ msgstr ""
msgid ""
"The <command>chage</command> command is restricted to the root user, except "
"for the <option>-l</option> option, which may be used by an unprivileged "
"user to determine when his/her password or account is due to expire."
"user to determine when their password or account is due to expire."
msgstr ""
"Kommandoen <command>chage</command> er begrænset til administratorbrugeren "
"(root), undtaget for tilvalget <option>-l</option>, som kan bruges af en "

View File

@@ -1092,7 +1092,7 @@ msgstr ""
#| "<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
#| "replaceable>|<replaceable>RANGE</replaceable>"
msgid ""
"<option>-v</option>, <option>--add-sub-uids</option>&nbsp;"
"<option>-v</option>, <option>--add-subuids</option>&nbsp;"
"<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>"
msgstr ""
"<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
@@ -1129,7 +1129,7 @@ msgstr ""
#| "<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
#| "replaceable>|<replaceable>RANGE</replaceable>"
msgid ""
"<option>-V</option>, <option>--del-sub-uids</option>&nbsp;"
"<option>-V</option>, <option>--del-subuids</option>&nbsp;"
"<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>"
msgstr ""
"<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
@@ -1142,8 +1142,8 @@ msgstr ""
#: usermod.8.xml:409(para)
msgid ""
"This option may be specified multiple times to remove multiple ranges to a "
"users account. When both <option>--del-sub-uids</option> and <option>--add-"
"sub-uids</option> are specified, the removal of all subordinate uid ranges "
"users account. When both <option>--del-subuids</option> and <option>--add-"
"subuids</option> are specified, the removal of all subordinate uid ranges "
"happens before any subordinate uid range is added."
msgstr ""
@@ -1153,7 +1153,7 @@ msgstr ""
#| "<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
#| "replaceable>|<replaceable>RANGE</replaceable>"
msgid ""
"<option>-w</option>, <option>--add-sub-gids</option>&nbsp;"
"<option>-w</option>, <option>--add-subgids</option>&nbsp;"
"<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>"
msgstr ""
"<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
@@ -1184,7 +1184,7 @@ msgstr ""
#| "<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
#| "replaceable>|<replaceable>RANGE</replaceable>"
msgid ""
"<option>-W</option>, <option>--del-sub-gids</option>&nbsp;"
"<option>-W</option>, <option>--del-subgids</option>&nbsp;"
"<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>"
msgstr ""
"<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
@@ -1201,8 +1201,8 @@ msgstr ""
#: usermod.8.xml:447(para)
msgid ""
"This option may be specified multiple times to remove multiple ranges to a "
"users account. When both <option>--del-sub-gids</option> and <option>--add-"
"sub-gids</option> are specified, the removal of all subordinate gid ranges "
"users account. When both <option>--del-subgids</option> and <option>--add-"
"subgids</option> are specified, the removal of all subordinate gid ranges "
"happens before any subordinate gid range is added."
msgstr ""
@@ -3087,7 +3087,7 @@ msgstr "5"
#: limits.5.xml:61(refmiscinfo) gshadow.5.xml:48(refmiscinfo)
#: faillog.5.xml:59(refmiscinfo)
msgid "File Formats and Conversions"
msgstr "Dateiformate und -konvertierung"
msgstr "Dateiformate und konvertierung"
#: suauth.5.xml:65(refpurpose)
msgid "detailed su control file"
@@ -4370,7 +4370,7 @@ msgstr ""
#: shadow.5.xml:235(para)
msgid "An empty field means that the account will never expire."
msgstr "Ein leeren Feld bedeutet, dass das Konto nicht verfallen wird."
msgstr "Ein leeres Feld bedeutet, dass das Konto nicht verfallen wird."
#: shadow.5.xml:238(para)
msgid ""
@@ -5459,7 +5459,7 @@ msgstr "ändert das Passwort eines Benutzers"
#: passwd.1.xml:89(para)
msgid ""
"The <command>passwd</command> command changes passwords for user accounts. A "
"normal user may only change the password for his/her own account, while the "
"normal user may only change the password for their own account, while the "
"superuser may change the password for any account. <command>passwd</command> "
"also changes the account or associated password validity period."
msgstr ""
@@ -5475,7 +5475,7 @@ msgstr "Verändern des Passworts"
#: passwd.1.xml:99(para)
msgid ""
"The user is first prompted for his/her old password, if one is present. This "
"The user is first prompted for their old password, if one is present. This "
"password is then encrypted and compared against the stored password. The "
"user has only one chance to enter the correct password. The superuser is "
"permitted to bypass this step so that forgotten passwords may be changed."
@@ -5625,7 +5625,7 @@ msgstr "<option>-e</option>, <option>--expire</option>"
#: passwd.1.xml:207(para)
msgid ""
"Immediately expire an account's password. This in effect can force a user to "
"change his/her password at the user's next login."
"change their password at the user's next login."
msgstr ""
"Lässt das Passwort eines Kontos sofort verfallen. Im Ergebnis kann damit "
"erreicht werden, dass ein Benutzer beim nächsten Login das Passwort ändern "
@@ -5709,7 +5709,7 @@ msgstr ""
msgid ""
"Set the minimum number of days between password changes to "
"<replaceable>MIN_DAYS</replaceable>. A value of zero for this field "
"indicates that the user may change his/her password at any time."
"indicates that the user may change their password at any time."
msgstr ""
"Setzt die Anzahl von Tagen, die mindestens zwischen zwei Änderungen eines "
"Passworts vergehen müssen, auf <replaceable>MIN_TAGE</replaceable>. Ein Wert "
@@ -5776,7 +5776,7 @@ msgstr ""
msgid ""
"Set the number of days of warning before a password change is required. The "
"<replaceable>WARN_DAYS</replaceable> option is the number of days prior to "
"the password expiring that a user will be warned that his/her password is "
"the password expiring that a user will be warned that their password is "
"about to expire."
msgstr ""
"Legt die Anzahl der Tage fest, an denen der Benutzer eine Warnung erhält, "
@@ -6961,7 +6961,7 @@ msgid ""
"contents of this file should be a message indicating why logins are "
"inhibited."
msgstr ""
"Falls angegeben, der Name einer Datei, dessen Existenz Anmeldungen außer von "
"Falls angegeben, der Name einer Datei, deren Existenz Anmeldungen außer von "
"Root verhindert. Der Inhalt der Datei sollte die Gründe enthalten, weshalb "
"Anmeldungen untersagt sind."
@@ -8773,7 +8773,7 @@ msgstr "-l"
# SB: 1. I don't understand "sake"? A typo? But of what? 2. I think we shouldn't have the notorious guest account here as an example.
#: groupmems.8.xml:86(para)
msgid ""
"The <command>groupmems</command> command allows a user to administer his/her "
"The <command>groupmems</command> command allows a user to administer their "
"own group membership list without the requirement of superuser privileges. "
"The <command>groupmems</command> utility is for systems that configure its "
"users to be in their own name sake primary group (i.e., guest / guest)."
@@ -10266,7 +10266,7 @@ msgstr "ändert die Information zum Passwortverfall"
msgid ""
"The <command>chage</command> command changes the number of days between "
"password changes and the date of the last password change. This information "
"is used by the system to determine when a user must change his/her password."
"is used by the system to determine when a user must change their password."
msgstr ""
"Der Befehl <command>chage</command> verändert die Anzahl der Tage zwischen "
"dem letzten Wechsel des Passworts und dem nächsten Wechsel. Mit dieser "
@@ -10386,8 +10386,8 @@ msgstr ""
msgid ""
"Set the maximum number of days during which a password is valid. When "
"<replaceable>MAX_DAYS</replaceable> plus <replaceable>LAST_DAY</replaceable> "
"is less than the current day, the user will be required to change his/her "
"password before being able to use his/her account. This occurrence can be "
"is less than the current day, the user will be required to change their "
"password before being able to use their account. This occurrence can be "
"planned for in advance by use of the <option>-W</option> option, which "
"provides the user with advance warning."
msgstr ""
@@ -10419,7 +10419,7 @@ msgstr ""
msgid ""
"Set the number of days of warning before a password change is required. The "
"<replaceable>WARN_DAYS</replaceable> option is the number of days prior to "
"the password expiring that a user will be warned his/her password is about "
"the password expiring that a user will be warned their password is about "
"to expire."
msgstr ""
"Legt die Anzahl der Tage fest, an denen der Benutzer eine Warnung erhält, "
@@ -10454,7 +10454,7 @@ msgstr ""
msgid ""
"The <command>chage</command> command is restricted to the root user, except "
"for the <option>-l</option> option, which may be used by an unprivileged "
"user to determine when his/her password or account is due to expire."
"user to determine when their password or account is due to expire."
msgstr ""
"Der Befehl <command>chage</command> kann nur von Root ausgeführt werden. "
"Alle anderen Benutzer können nur die Option <option>-l</option> verwenden, "

File diff suppressed because it is too large Load Diff

View File

@@ -1151,7 +1151,7 @@ msgstr ""
#| "<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
#| "replaceable>|<replaceable>RANGE</replaceable>"
msgid ""
"<option>-v</option>, <option>--add-sub-uids</option>&nbsp;"
"<option>-v</option>, <option>--add-subuids</option>&nbsp;"
"<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>"
msgstr ""
"<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
@@ -1189,7 +1189,7 @@ msgstr ""
#| "<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
#| "replaceable>|<replaceable>RANGE</replaceable>"
msgid ""
"<option>-V</option>, <option>--del-sub-uids</option>&nbsp;"
"<option>-V</option>, <option>--del-subuids</option>&nbsp;"
"<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>"
msgstr ""
"<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
@@ -1202,8 +1202,8 @@ msgstr ""
#: usermod.8.xml:409(para)
msgid ""
"This option may be specified multiple times to remove multiple ranges to a "
"users account. When both <option>--del-sub-uids</option> and <option>--add-"
"sub-uids</option> are specified, the removal of all subordinate uid ranges "
"users account. When both <option>--del-subuids</option> and <option>--add-"
"subuids</option> are specified, the removal of all subordinate uid ranges "
"happens before any subordinate uid range is added."
msgstr ""
@@ -1214,7 +1214,7 @@ msgstr ""
#| "<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
#| "replaceable>|<replaceable>RANGE</replaceable>"
msgid ""
"<option>-w</option>, <option>--add-sub-gids</option>&nbsp;"
"<option>-w</option>, <option>--add-subgids</option>&nbsp;"
"<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>"
msgstr ""
"<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
@@ -1247,7 +1247,7 @@ msgstr ""
#| "<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
#| "replaceable>|<replaceable>RANGE</replaceable>"
msgid ""
"<option>-W</option>, <option>--del-sub-gids</option>&nbsp;"
"<option>-W</option>, <option>--del-subgids</option>&nbsp;"
"<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>"
msgstr ""
"<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
@@ -1262,8 +1262,8 @@ msgstr "Rimuove tutti gli utenti SELinux assegnati al login utente."
#: usermod.8.xml:447(para)
msgid ""
"This option may be specified multiple times to remove multiple ranges to a "
"users account. When both <option>--del-sub-gids</option> and <option>--add-"
"sub-gids</option> are specified, the removal of all subordinate gid ranges "
"users account. When both <option>--del-subgids</option> and <option>--add-"
"subgids</option> are specified, the removal of all subordinate gid ranges "
"happens before any subordinate gid range is added."
msgstr ""
@@ -5714,7 +5714,7 @@ msgstr "cambia la password utente"
#: passwd.1.xml:89(para)
msgid ""
"The <command>passwd</command> command changes passwords for user accounts. A "
"normal user may only change the password for his/her own account, while the "
"normal user may only change the password for their own account, while the "
"superuser may change the password for any account. <command>passwd</command> "
"also changes the account or associated password validity period."
msgstr ""
@@ -5731,7 +5731,7 @@ msgstr "Modifiche delle password"
# type: Plain text
#: passwd.1.xml:99(para)
msgid ""
"The user is first prompted for his/her old password, if one is present. This "
"The user is first prompted for their old password, if one is present. This "
"password is then encrypted and compared against the stored password. The "
"user has only one chance to enter the correct password. The superuser is "
"permitted to bypass this step so that forgotten passwords may be changed."
@@ -5892,7 +5892,7 @@ msgstr "<option>-e</option>, <option>--expire</option>"
#: passwd.1.xml:207(para)
msgid ""
"Immediately expire an account's password. This in effect can force a user to "
"change his/her password at the user's next login."
"change their password at the user's next login."
msgstr ""
"Fa scadere subito la password dell'utente. Il che ha l'effetto di forzare un "
"cambio password al successivo accesso da parte dell'utente."
@@ -5978,7 +5978,7 @@ msgstr ""
msgid ""
"Set the minimum number of days between password changes to "
"<replaceable>MIN_DAYS</replaceable>. A value of zero for this field "
"indicates that the user may change his/her password at any time."
"indicates that the user may change their password at any time."
msgstr ""
"Imposta il numero minimo di giorni tra i cambi di password a "
"<replaceable>MIN_GIORNI</replaceable>. Un valore pari a zero indica che "
@@ -6050,7 +6050,7 @@ msgstr ""
msgid ""
"Set the number of days of warning before a password change is required. The "
"<replaceable>WARN_DAYS</replaceable> option is the number of days prior to "
"the password expiring that a user will be warned that his/her password is "
"the password expiring that a user will be warned that their password is "
"about to expire."
msgstr ""
"Imposta il numero di giorni di preavviso prima che sia obbligatorio cambiare "
@@ -9144,7 +9144,7 @@ msgstr "-l"
#: groupmems.8.xml:86(para)
msgid ""
"The <command>groupmems</command> command allows a user to administer his/her "
"The <command>groupmems</command> command allows a user to administer their "
"own group membership list without the requirement of superuser privileges. "
"The <command>groupmems</command> utility is for systems that configure its "
"users to be in their own name sake primary group (i.e., guest / guest)."
@@ -10707,7 +10707,7 @@ msgstr "cambia le informazioni sulla scadenza della password"
msgid ""
"The <command>chage</command> command changes the number of days between "
"password changes and the date of the last password change. This information "
"is used by the system to determine when a user must change his/her password."
"is used by the system to determine when a user must change their password."
msgstr ""
"<command>chage</command> modifica il numero minimo di giorni tra i cambi di "
"password e la data dell'ultimo cambio. Queste informazioni sono usate dal "
@@ -10832,8 +10832,8 @@ msgstr ""
msgid ""
"Set the maximum number of days during which a password is valid. When "
"<replaceable>MAX_DAYS</replaceable> plus <replaceable>LAST_DAY</replaceable> "
"is less than the current day, the user will be required to change his/her "
"password before being able to use his/her account. This occurrence can be "
"is less than the current day, the user will be required to change their "
"password before being able to use their account. This occurrence can be "
"planned for in advance by use of the <option>-W</option> option, which "
"provides the user with advance warning."
msgstr ""
@@ -10868,7 +10868,7 @@ msgstr ""
msgid ""
"Set the number of days of warning before a password change is required. The "
"<replaceable>WARN_DAYS</replaceable> option is the number of days prior to "
"the password expiring that a user will be warned his/her password is about "
"the password expiring that a user will be warned their password is about "
"to expire."
msgstr ""
"Imposta il numero di giorni di preavviso prima che sia obbligatorio cambiare "
@@ -10905,7 +10905,7 @@ msgstr ""
msgid ""
"The <command>chage</command> command is restricted to the root user, except "
"for the <option>-l</option> option, which may be used by an unprivileged "
"user to determine when his/her password or account is due to expire."
"user to determine when their password or account is due to expire."
msgstr ""
"L'uso del comando <command>chage</command> è permesso solo all'utente root, "
"tranne per l'opzione <option>-l</option>, che può essere usata da un utente "

View File

@@ -1088,7 +1088,7 @@ msgstr ""
#| "<option>-K</option>, <option>--key</option>&nbsp;<replaceable>KEY</"
#| "replaceable>=<replaceable>VALUE</replaceable>"
msgid ""
"<option>-v</option>, <option>--add-sub-uids</option>&nbsp;"
"<option>-v</option>, <option>--add-subuids</option>&nbsp;"
"<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>"
msgstr ""
"<option>-K</option>, <option>--key</option>&nbsp;<replaceable>KLUCZ</"
@@ -1117,7 +1117,7 @@ msgstr ""
#| "<option>-K</option>, <option>--key</option>&nbsp;<replaceable>KEY</"
#| "replaceable>=<replaceable>VALUE</replaceable>"
msgid ""
"<option>-V</option>, <option>--del-sub-uids</option>&nbsp;"
"<option>-V</option>, <option>--del-subuids</option>&nbsp;"
"<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>"
msgstr ""
"<option>-K</option>, <option>--key</option>&nbsp;<replaceable>KLUCZ</"
@@ -1130,8 +1130,8 @@ msgstr ""
#: usermod.8.xml:409(para)
msgid ""
"This option may be specified multiple times to remove multiple ranges to a "
"users account. When both <option>--del-sub-uids</option> and <option>--add-"
"sub-uids</option> are specified, the removal of all subordinate uid ranges "
"users account. When both <option>--del-subuids</option> and <option>--add-"
"subuids</option> are specified, the removal of all subordinate uid ranges "
"happens before any subordinate uid range is added."
msgstr ""
@@ -1141,7 +1141,7 @@ msgstr ""
#| "<option>-K</option>, <option>--key</option>&nbsp;<replaceable>KEY</"
#| "replaceable>=<replaceable>VALUE</replaceable>"
msgid ""
"<option>-w</option>, <option>--add-sub-gids</option>&nbsp;"
"<option>-w</option>, <option>--add-subgids</option>&nbsp;"
"<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>"
msgstr ""
"<option>-K</option>, <option>--key</option>&nbsp;<replaceable>KLUCZ</"
@@ -1164,7 +1164,7 @@ msgstr ""
#| "<option>-K</option>, <option>--key</option>&nbsp;<replaceable>KEY</"
#| "replaceable>=<replaceable>VALUE</replaceable>"
msgid ""
"<option>-W</option>, <option>--del-sub-gids</option>&nbsp;"
"<option>-W</option>, <option>--del-subgids</option>&nbsp;"
"<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>"
msgstr ""
"<option>-K</option>, <option>--key</option>&nbsp;<replaceable>KLUCZ</"
@@ -1177,8 +1177,8 @@ msgstr ""
#: usermod.8.xml:447(para)
msgid ""
"This option may be specified multiple times to remove multiple ranges to a "
"users account. When both <option>--del-sub-gids</option> and <option>--add-"
"sub-gids</option> are specified, the removal of all subordinate gid ranges "
"users account. When both <option>--del-subgids</option> and <option>--add-"
"subgids</option> are specified, the removal of all subordinate gid ranges "
"happens before any subordinate gid range is added."
msgstr ""
@@ -4659,7 +4659,7 @@ msgstr "zmiana hasła użytkownika"
#: passwd.1.xml:89(para)
msgid ""
"The <command>passwd</command> command changes passwords for user accounts. A "
"normal user may only change the password for his/her own account, while the "
"normal user may only change the password for their own account, while the "
"superuser may change the password for any account. <command>passwd</command> "
"also changes the account or associated password validity period."
msgstr ""
@@ -4670,7 +4670,7 @@ msgstr ""
#: passwd.1.xml:99(para)
msgid ""
"The user is first prompted for his/her old password, if one is present. This "
"The user is first prompted for their old password, if one is present. This "
"password is then encrypted and compared against the stored password. The "
"user has only one chance to enter the correct password. The superuser is "
"permitted to bypass this step so that forgotten passwords may be changed."
@@ -4776,7 +4776,7 @@ msgstr "<option>-e</option>, <option>--expire</option>"
#: passwd.1.xml:207(para)
msgid ""
"Immediately expire an account's password. This in effect can force a user to "
"change his/her password at the user's next login."
"change their password at the user's next login."
msgstr ""
#: passwd.1.xml:220(term)
@@ -4845,7 +4845,7 @@ msgstr ""
msgid ""
"Set the minimum number of days between password changes to "
"<replaceable>MIN_DAYS</replaceable>. A value of zero for this field "
"indicates that the user may change his/her password at any time."
"indicates that the user may change their password at any time."
msgstr ""
"Utawia minimalną liczbę dni pomiędzy zmianami hasła na "
"<replaceable>MIN_DAYS</replaceable>. Wartość zerowa oznacza, że użytkownik "
@@ -4901,7 +4901,7 @@ msgstr ""
msgid ""
"Set the number of days of warning before a password change is required. The "
"<replaceable>WARN_DAYS</replaceable> option is the number of days prior to "
"the password expiring that a user will be warned that his/her password is "
"the password expiring that a user will be warned that their password is "
"about to expire."
msgstr ""
@@ -7455,7 +7455,7 @@ msgstr "-l"
#: groupmems.8.xml:86(para)
msgid ""
"The <command>groupmems</command> command allows a user to administer his/her "
"The <command>groupmems</command> command allows a user to administer their "
"own group membership list without the requirement of superuser privileges. "
"The <command>groupmems</command> utility is for systems that configure its "
"users to be in their own name sake primary group (i.e., guest / guest)."
@@ -8833,7 +8833,7 @@ msgstr "zmiana informacji o terminie ważności hasła użytkownika"
msgid ""
"The <command>chage</command> command changes the number of days between "
"password changes and the date of the last password change. This information "
"is used by the system to determine when a user must change his/her password."
"is used by the system to determine when a user must change their password."
msgstr ""
"Polecenie <command>chage</command> zmienia liczbę dni pomiędzy zmianami "
"hasła i datę ostatniej zmiany hasła. Informację tę system wykorzystuje do "
@@ -8947,8 +8947,8 @@ msgstr ""
msgid ""
"Set the maximum number of days during which a password is valid. When "
"<replaceable>MAX_DAYS</replaceable> plus <replaceable>LAST_DAY</replaceable> "
"is less than the current day, the user will be required to change his/her "
"password before being able to use his/her account. This occurrence can be "
"is less than the current day, the user will be required to change their "
"password before being able to use their account. This occurrence can be "
"planned for in advance by use of the <option>-W</option> option, which "
"provides the user with advance warning."
msgstr ""
@@ -8980,7 +8980,7 @@ msgstr ""
msgid ""
"Set the number of days of warning before a password change is required. The "
"<replaceable>WARN_DAYS</replaceable> option is the number of days prior to "
"the password expiring that a user will be warned his/her password is about "
"the password expiring that a user will be warned their password is about "
"to expire."
msgstr ""
"Ustawia na <replaceable>DNI_OSTRZ</replaceable> liczbę dni przed upływem "
@@ -9013,7 +9013,7 @@ msgstr ""
msgid ""
"The <command>chage</command> command is restricted to the root user, except "
"for the <option>-l</option> option, which may be used by an unprivileged "
"user to determine when his/her password or account is due to expire."
"user to determine when their password or account is due to expire."
msgstr ""
"Polecenia chage może użyć tylko użytkownik root, za wyjątkiem opcji <option>-"
"l</option>. Może się nią posłużyć się użytkownik nieuprzywilejowany do "

View File

@@ -1133,7 +1133,7 @@ msgstr ""
#| "<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
#| "replaceable>|<replaceable>RANGE</replaceable>"
msgid ""
"<option>-v</option>, <option>--add-sub-uids</option>&nbsp;"
"<option>-v</option>, <option>--add-subuids</option>&nbsp;"
"<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>"
msgstr ""
"<option>-u</option>, <option>--user</option>&nbsp;<replaceable>УЧЁТНАЯ "
@@ -1170,7 +1170,7 @@ msgstr ""
#| "<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
#| "replaceable>|<replaceable>RANGE</replaceable>"
msgid ""
"<option>-V</option>, <option>--del-sub-uids</option>&nbsp;"
"<option>-V</option>, <option>--del-subuids</option>&nbsp;"
"<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>"
msgstr ""
"<option>-u</option>, <option>--user</option>&nbsp;<replaceable>УЧЁТНАЯ "
@@ -1183,8 +1183,8 @@ msgstr ""
#: usermod.8.xml:409(para)
msgid ""
"This option may be specified multiple times to remove multiple ranges to a "
"users account. When both <option>--del-sub-uids</option> and <option>--add-"
"sub-uids</option> are specified, the removal of all subordinate uid ranges "
"users account. When both <option>--del-subuids</option> and <option>--add-"
"subuids</option> are specified, the removal of all subordinate uid ranges "
"happens before any subordinate uid range is added."
msgstr ""
@@ -1194,7 +1194,7 @@ msgstr ""
#| "<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
#| "replaceable>|<replaceable>RANGE</replaceable>"
msgid ""
"<option>-w</option>, <option>--add-sub-gids</option>&nbsp;"
"<option>-w</option>, <option>--add-subgids</option>&nbsp;"
"<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>"
msgstr ""
"<option>-u</option>, <option>--user</option>&nbsp;<replaceable>УЧЁТНАЯ "
@@ -1225,7 +1225,7 @@ msgstr ""
#| "<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
#| "replaceable>|<replaceable>RANGE</replaceable>"
msgid ""
"<option>-W</option>, <option>--del-sub-gids</option>&nbsp;"
"<option>-W</option>, <option>--del-subgids</option>&nbsp;"
"<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>"
msgstr ""
"<option>-u</option>, <option>--user</option>&nbsp;<replaceable>УЧЁТНАЯ "
@@ -1242,8 +1242,8 @@ msgstr ""
#: usermod.8.xml:447(para)
msgid ""
"This option may be specified multiple times to remove multiple ranges to a "
"users account. When both <option>--del-sub-gids</option> and <option>--add-"
"sub-gids</option> are specified, the removal of all subordinate gid ranges "
"users account. When both <option>--del-subgids</option> and <option>--add-"
"subgids</option> are specified, the removal of all subordinate gid ranges "
"happens before any subordinate gid range is added."
msgstr ""
@@ -5700,7 +5700,7 @@ msgstr "изменяет пароль пользователя"
#: passwd.1.xml:89(para)
msgid ""
"The <command>passwd</command> command changes passwords for user accounts. A "
"normal user may only change the password for his/her own account, while the "
"normal user may only change the password for their own account, while the "
"superuser may change the password for any account. <command>passwd</command> "
"also changes the account or associated password validity period."
msgstr ""
@@ -5718,7 +5718,7 @@ msgstr "Изменение пароля"
# type: Content of: <refentry><refsect1><refsect2><para>
#: passwd.1.xml:99(para)
msgid ""
"The user is first prompted for his/her old password, if one is present. This "
"The user is first prompted for their old password, if one is present. This "
"password is then encrypted and compared against the stored password. The "
"user has only one chance to enter the correct password. The superuser is "
"permitted to bypass this step so that forgotten passwords may be changed."
@@ -5876,7 +5876,7 @@ msgstr "<option>-e</option>, <option>--expire</option>"
#: passwd.1.xml:207(para)
msgid ""
"Immediately expire an account's password. This in effect can force a user to "
"change his/her password at the user's next login."
"change their password at the user's next login."
msgstr ""
"Немедленно сделать пароль устаревшим. В результате это заставит пользователя "
"изменить пароль при следующем входе в систему."
@@ -5962,7 +5962,7 @@ msgstr ""
msgid ""
"Set the minimum number of days between password changes to "
"<replaceable>MIN_DAYS</replaceable>. A value of zero for this field "
"indicates that the user may change his/her password at any time."
"indicates that the user may change their password at any time."
msgstr ""
"Задать <replaceable>минимальное количество дней</replaceable> между сменами "
"пароля. Нулевое значение этого поля указывает на то, что пользователь может "
@@ -6030,7 +6030,7 @@ msgstr ""
msgid ""
"Set the number of days of warning before a password change is required. The "
"<replaceable>WARN_DAYS</replaceable> option is the number of days prior to "
"the password expiring that a user will be warned that his/her password is "
"the password expiring that a user will be warned that their password is "
"about to expire."
msgstr ""
"Установить число дней выдачи предупреждения, перед тем как потребуется смена "
@@ -9182,7 +9182,7 @@ msgstr "-l"
#: groupmems.8.xml:86(para)
msgid ""
"The <command>groupmems</command> command allows a user to administer his/her "
"The <command>groupmems</command> command allows a user to administer their "
"own group membership list without the requirement of superuser privileges. "
"The <command>groupmems</command> utility is for systems that configure its "
"users to be in their own name sake primary group (i.e., guest / guest)."
@@ -10700,7 +10700,7 @@ msgstr "изменяет информацию об устаревании пар
msgid ""
"The <command>chage</command> command changes the number of days between "
"password changes and the date of the last password change. This information "
"is used by the system to determine when a user must change his/her password."
"is used by the system to determine when a user must change their password."
msgstr ""
"Программа <command>chage</command> изменяет количество дней между датой "
"смены пароля и датой последней смены пароля. Эта информация используется "
@@ -10820,8 +10820,8 @@ msgstr ""
msgid ""
"Set the maximum number of days during which a password is valid. When "
"<replaceable>MAX_DAYS</replaceable> plus <replaceable>LAST_DAY</replaceable> "
"is less than the current day, the user will be required to change his/her "
"password before being able to use his/her account. This occurrence can be "
"is less than the current day, the user will be required to change their "
"password before being able to use their account. This occurrence can be "
"planned for in advance by use of the <option>-W</option> option, which "
"provides the user with advance warning."
msgstr ""
@@ -10854,7 +10854,7 @@ msgstr ""
msgid ""
"Set the number of days of warning before a password change is required. The "
"<replaceable>WARN_DAYS</replaceable> option is the number of days prior to "
"the password expiring that a user will be warned his/her password is about "
"the password expiring that a user will be warned their password is about "
"to expire."
msgstr ""
"Установить количество дней выдачи предупреждения, перед тем как потребуется "
@@ -10890,7 +10890,7 @@ msgstr ""
msgid ""
"The <command>chage</command> command is restricted to the root user, except "
"for the <option>-l</option> option, which may be used by an unprivileged "
"user to determine when his/her password or account is due to expire."
"user to determine when their password or account is due to expire."
msgstr ""
"Программа <command>chage</command> работает только от суперпользователя, за "
"исключением вызова с параметром <option>-l</option>, который может "

View File

@@ -458,7 +458,7 @@ msgid "Note: if you wish to unlock the account (not only access with a password)
msgstr ""
#: usermod.8.xml:384(term)
msgid "<option>-v</option>, <option>--add-sub-uids</option>&nbsp;<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>"
msgid "<option>-v</option>, <option>--add-subuids</option>&nbsp;<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>"
msgstr ""
#: usermod.8.xml:388(para)
@@ -474,7 +474,7 @@ msgid "No checks will be performed with regard to <option>SUB_UID_MIN</option>,
msgstr ""
#: usermod.8.xml:402(term)
msgid "<option>-V</option>, <option>--del-sub-uids</option>&nbsp;<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>"
msgid "<option>-V</option>, <option>--del-subuids</option>&nbsp;<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>"
msgstr ""
#: usermod.8.xml:406(para)
@@ -482,11 +482,11 @@ msgid "Remove a range of subordinate uids from the user's account."
msgstr ""
#: usermod.8.xml:409(para)
msgid "This option may be specified multiple times to remove multiple ranges to a users account. When both <option>--del-sub-uids</option> and <option>--add-sub-uids</option> are specified, the removal of all subordinate uid ranges happens before any subordinate uid range is added."
msgid "This option may be specified multiple times to remove multiple ranges to a users account. When both <option>--del-subuids</option> and <option>--add-subuids</option> are specified, the removal of all subordinate uid ranges happens before any subordinate uid range is added."
msgstr ""
#: usermod.8.xml:422(term)
msgid "<option>-w</option>, <option>--add-sub-gids</option>&nbsp;<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>"
msgid "<option>-w</option>, <option>--add-subgids</option>&nbsp;<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>"
msgstr ""
#: usermod.8.xml:426(para)
@@ -498,7 +498,7 @@ msgid "No checks will be performed with regard to <option>SUB_GID_MIN</option>,
msgstr ""
#: usermod.8.xml:440(term)
msgid "<option>-W</option>, <option>--del-sub-gids</option>&nbsp;<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>"
msgid "<option>-W</option>, <option>--del-subgids</option>&nbsp;<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>"
msgstr ""
#: usermod.8.xml:444(para)
@@ -506,7 +506,7 @@ msgid "Remove a range of subordinate gids from the user's account."
msgstr ""
#: usermod.8.xml:447(para)
msgid "This option may be specified multiple times to remove multiple ranges to a users account. When both <option>--del-sub-gids</option> and <option>--add-sub-gids</option> are specified, the removal of all subordinate gid ranges happens before any subordinate gid range is added."
msgid "This option may be specified multiple times to remove multiple ranges to a users account. When both <option>--del-subgids</option> and <option>--add-subgids</option> are specified, the removal of all subordinate gid ranges happens before any subordinate gid range is added."
msgstr ""
#: usermod.8.xml:460(term) useradd.8.xml:506(term)
@@ -2492,7 +2492,7 @@ msgid "change user password"
msgstr ""
#: passwd.1.xml:89(para)
msgid "The <command>passwd</command> command changes passwords for user accounts. A normal user may only change the password for his/her own account, while the superuser may change the password for any account. <command>passwd</command> also changes the account or associated password validity period."
msgid "The <command>passwd</command> command changes passwords for user accounts. A normal user may only change the password for their own account, while the superuser may change the password for any account. <command>passwd</command> also changes the account or associated password validity period."
msgstr ""
#: passwd.1.xml:98(title)
@@ -2500,7 +2500,7 @@ msgid "Password Changes"
msgstr ""
#: passwd.1.xml:99(para)
msgid "The user is first prompted for his/her old password, if one is present. This password is then encrypted and compared against the stored password. The user has only one chance to enter the correct password. The superuser is permitted to bypass this step so that forgotten passwords may be changed."
msgid "The user is first prompted for their old password, if one is present. This password is then encrypted and compared against the stored password. The user has only one chance to enter the correct password. The superuser is permitted to bypass this step so that forgotten passwords may be changed."
msgstr ""
#: passwd.1.xml:107(para)
@@ -2572,7 +2572,7 @@ msgid "<option>-e</option>, <option>--expire</option>"
msgstr ""
#: passwd.1.xml:207(para)
msgid "Immediately expire an account's password. This in effect can force a user to change his/her password at the user's next login."
msgid "Immediately expire an account's password. This in effect can force a user to change their password at the user's next login."
msgstr ""
#: passwd.1.xml:220(term)
@@ -2612,7 +2612,7 @@ msgid "<option>-n</option>, <option>--mindays</option>&nbsp;<replaceable>MIN_DAY
msgstr ""
#: passwd.1.xml:273(para) chage.1.xml:168(para)
msgid "Set the minimum number of days between password changes to <replaceable>MIN_DAYS</replaceable>. A value of zero for this field indicates that the user may change his/her password at any time."
msgid "Set the minimum number of days between password changes to <replaceable>MIN_DAYS</replaceable>. A value of zero for this field indicates that the user may change their password at any time."
msgstr ""
#: passwd.1.xml:291(term)
@@ -2644,7 +2644,7 @@ msgid "<option>-w</option>, <option>--warndays</option>&nbsp;<replaceable>WARN_D
msgstr ""
#: passwd.1.xml:348(para)
msgid "Set the number of days of warning before a password change is required. The <replaceable>WARN_DAYS</replaceable> option is the number of days prior to the password expiring that a user will be warned that his/her password is about to expire."
msgid "Set the number of days of warning before a password change is required. The <replaceable>WARN_DAYS</replaceable> option is the number of days prior to the password expiring that a user will be warned that their password is about to expire."
msgstr ""
#: passwd.1.xml:357(term)
@@ -4169,7 +4169,7 @@ msgid "-l"
msgstr ""
#: groupmems.8.xml:86(para)
msgid "The <command>groupmems</command> command allows a user to administer his/her own group membership list without the requirement of superuser privileges. The <command>groupmems</command> utility is for systems that configure its users to be in their own name sake primary group (i.e., guest / guest)."
msgid "The <command>groupmems</command> command allows a user to administer their own group membership list without the requirement of superuser privileges. The <command>groupmems</command> utility is for systems that configure its users to be in their own name sake primary group (i.e., guest / guest)."
msgstr ""
#: groupmems.8.xml:94(para)
@@ -4863,7 +4863,7 @@ msgid "change user password expiry information"
msgstr ""
#: chage.1.xml:82(para)
msgid "The <command>chage</command> command changes the number of days between password changes and the date of the last password change. This information is used by the system to determine when a user must change his/her password."
msgid "The <command>chage</command> command changes the number of days between password changes and the date of the last password change. This information is used by the system to determine when a user must change their password."
msgstr ""
#: chage.1.xml:92(para)
@@ -4915,7 +4915,7 @@ msgid "<option>-M</option>, <option>--maxdays</option>&nbsp;<replaceable>MAX_DAY
msgstr ""
#: chage.1.xml:180(para)
msgid "Set the maximum number of days during which a password is valid. When <replaceable>MAX_DAYS</replaceable> plus <replaceable>LAST_DAY</replaceable> is less than the current day, the user will be required to change his/her password before being able to use his/her account. This occurrence can be planned for in advance by use of the <option>-W</option> option, which provides the user with advance warning."
msgid "Set the maximum number of days during which a password is valid. When <replaceable>MAX_DAYS</replaceable> plus <replaceable>LAST_DAY</replaceable> is less than the current day, the user will be required to change their password before being able to use their account. This occurrence can be planned for in advance by use of the <option>-W</option> option, which provides the user with advance warning."
msgstr ""
#: chage.1.xml:189(para)
@@ -4927,7 +4927,7 @@ msgid "<option>-W</option>, <option>--warndays</option>&nbsp;<replaceable>WARN_D
msgstr ""
#: chage.1.xml:213(para)
msgid "Set the number of days of warning before a password change is required. The <replaceable>WARN_DAYS</replaceable> option is the number of days prior to the password expiring that a user will be warned his/her password is about to expire."
msgid "Set the number of days of warning before a password change is required. The <replaceable>WARN_DAYS</replaceable> option is the number of days prior to the password expiring that a user will be warned their password is about to expire."
msgstr ""
#: chage.1.xml:222(para)
@@ -4939,7 +4939,7 @@ msgid "The <command>chage</command> program requires a shadow password file to b
msgstr ""
#: chage.1.xml:236(para)
msgid "The <command>chage</command> command is restricted to the root user, except for the <option>-l</option> option, which may be used by an unprivileged user to determine when his/her password or account is due to expire."
msgid "The <command>chage</command> command is restricted to the root user, except for the <option>-l</option> option, which may be used by an unprivileged user to determine when their password or account is due to expire."
msgstr ""
#: chage.1.xml:301(replaceable)

View File

@@ -1062,7 +1062,7 @@ msgstr ""
#| "<option>-K</option>, <option>--key</option>&nbsp;<replaceable>KEY</"
#| "replaceable>=<replaceable>VALUE</replaceable>"
msgid ""
"<option>-v</option>, <option>--add-sub-uids</option>&nbsp;"
"<option>-v</option>, <option>--add-subuids</option>&nbsp;"
"<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>"
msgstr ""
"<option>-K</option>, <option>--key</option>&nbsp;<replaceable>NYCKEL</"
@@ -1091,7 +1091,7 @@ msgstr ""
#| "<option>-K</option>, <option>--key</option>&nbsp;<replaceable>KEY</"
#| "replaceable>=<replaceable>VALUE</replaceable>"
msgid ""
"<option>-V</option>, <option>--del-sub-uids</option>&nbsp;"
"<option>-V</option>, <option>--del-subuids</option>&nbsp;"
"<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>"
msgstr ""
"<option>-K</option>, <option>--key</option>&nbsp;<replaceable>NYCKEL</"
@@ -1104,8 +1104,8 @@ msgstr ""
#: usermod.8.xml:409(para)
msgid ""
"This option may be specified multiple times to remove multiple ranges to a "
"users account. When both <option>--del-sub-uids</option> and <option>--add-"
"sub-uids</option> are specified, the removal of all subordinate uid ranges "
"users account. When both <option>--del-subuids</option> and <option>--add-"
"subuids</option> are specified, the removal of all subordinate uid ranges "
"happens before any subordinate uid range is added."
msgstr ""
@@ -1115,7 +1115,7 @@ msgstr ""
#| "<option>-K</option>, <option>--key</option>&nbsp;<replaceable>KEY</"
#| "replaceable>=<replaceable>VALUE</replaceable>"
msgid ""
"<option>-w</option>, <option>--add-sub-gids</option>&nbsp;"
"<option>-w</option>, <option>--add-subgids</option>&nbsp;"
"<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>"
msgstr ""
"<option>-K</option>, <option>--key</option>&nbsp;<replaceable>NYCKEL</"
@@ -1138,7 +1138,7 @@ msgstr ""
#| "<option>-K</option>, <option>--key</option>&nbsp;<replaceable>KEY</"
#| "replaceable>=<replaceable>VALUE</replaceable>"
msgid ""
"<option>-W</option>, <option>--del-sub-gids</option>&nbsp;"
"<option>-W</option>, <option>--del-subgids</option>&nbsp;"
"<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>"
msgstr ""
"<option>-K</option>, <option>--key</option>&nbsp;<replaceable>NYCKEL</"
@@ -1151,8 +1151,8 @@ msgstr ""
#: usermod.8.xml:447(para)
msgid ""
"This option may be specified multiple times to remove multiple ranges to a "
"users account. When both <option>--del-sub-gids</option> and <option>--add-"
"sub-gids</option> are specified, the removal of all subordinate gid ranges "
"users account. When both <option>--del-subgids</option> and <option>--add-"
"subgids</option> are specified, the removal of all subordinate gid ranges "
"happens before any subordinate gid range is added."
msgstr ""
@@ -4806,7 +4806,7 @@ msgstr "ändra användarlösenord"
#, fuzzy
msgid ""
"The <command>passwd</command> command changes passwords for user accounts. A "
"normal user may only change the password for his/her own account, while the "
"normal user may only change the password for their own account, while the "
"superuser may change the password for any account. <command>passwd</command> "
"also changes the account or associated password validity period."
msgstr ""
@@ -4824,7 +4824,7 @@ msgstr "Lösenordsändringar"
#: passwd.1.xml:99(para)
#, fuzzy
msgid ""
"The user is first prompted for his/her old password, if one is present. This "
"The user is first prompted for their old password, if one is present. This "
"password is then encrypted and compared against the stored password. The "
"user has only one chance to enter the correct password. The superuser is "
"permitted to bypass this step so that forgotten passwords may be changed."
@@ -4969,7 +4969,7 @@ msgstr "<option>-e</option>, <option>--expire</option>"
#: passwd.1.xml:207(para)
msgid ""
"Immediately expire an account's password. This in effect can force a user to "
"change his/her password at the user's next login."
"change their password at the user's next login."
msgstr ""
"Lösenordet för ett konto sätts omedelbart som utgånget. Detta kan tvinga en "
"användare att ändra sitt lösenord vid nästa inloggningsförsök."
@@ -5051,7 +5051,7 @@ msgstr ""
msgid ""
"Set the minimum number of days between password changes to "
"<replaceable>MIN_DAYS</replaceable>. A value of zero for this field "
"indicates that the user may change his/her password at any time."
"indicates that the user may change their password at any time."
msgstr ""
"Sätter minimalt antal dagar mellan lösenordsändringar till "
"<replaceable>MIN_DAGAR</replaceable>. Ett nollvärde för detta fält betyder "
@@ -5128,7 +5128,7 @@ msgstr ""
msgid ""
"Set the number of days of warning before a password change is required. The "
"<replaceable>WARN_DAYS</replaceable> option is the number of days prior to "
"the password expiring that a user will be warned that his/her password is "
"the password expiring that a user will be warned that their password is "
"about to expire."
msgstr ""
"Sätter antalet dagar för varning före ett lösenord behöver ändras. Flaggan "
@@ -7671,7 +7671,7 @@ msgstr "-l"
#: groupmems.8.xml:86(para)
msgid ""
"The <command>groupmems</command> command allows a user to administer his/her "
"The <command>groupmems</command> command allows a user to administer their "
"own group membership list without the requirement of superuser privileges. "
"The <command>groupmems</command> utility is for systems that configure its "
"users to be in their own name sake primary group (i.e., guest / guest)."
@@ -9064,7 +9064,7 @@ msgstr "ändra åldringsinformation för användarlösenord"
msgid ""
"The <command>chage</command> command changes the number of days between "
"password changes and the date of the last password change. This information "
"is used by the system to determine when a user must change his/her password."
"is used by the system to determine when a user must change their password."
msgstr ""
#: chage.1.xml:92(para)
@@ -9156,8 +9156,8 @@ msgstr ""
msgid ""
"Set the maximum number of days during which a password is valid. When "
"<replaceable>MAX_DAYS</replaceable> plus <replaceable>LAST_DAY</replaceable> "
"is less than the current day, the user will be required to change his/her "
"password before being able to use his/her account. This occurrence can be "
"is less than the current day, the user will be required to change their "
"password before being able to use their account. This occurrence can be "
"planned for in advance by use of the <option>-W</option> option, which "
"provides the user with advance warning."
msgstr ""
@@ -9181,7 +9181,7 @@ msgstr ""
msgid ""
"Set the number of days of warning before a password change is required. The "
"<replaceable>WARN_DAYS</replaceable> option is the number of days prior to "
"the password expiring that a user will be warned his/her password is about "
"the password expiring that a user will be warned their password is about "
"to expire."
msgstr ""
@@ -9206,7 +9206,7 @@ msgstr ""
msgid ""
"The <command>chage</command> command is restricted to the root user, except "
"for the <option>-l</option> option, which may be used by an unprivileged "
"user to determine when his/her password or account is due to expire."
"user to determine when their password or account is due to expire."
msgstr ""
#: chage.1.xml:301(replaceable)

View File

@@ -1043,7 +1043,7 @@ msgstr ""
#| "<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
#| "replaceable>|<replaceable>RANGE</replaceable>"
msgid ""
"<option>-v</option>, <option>--add-sub-uids</option>&nbsp;"
"<option>-v</option>, <option>--add-subuids</option>&nbsp;"
"<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>"
msgstr ""
"<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
@@ -1080,7 +1080,7 @@ msgstr ""
#| "<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
#| "replaceable>|<replaceable>RANGE</replaceable>"
msgid ""
"<option>-V</option>, <option>--del-sub-uids</option>&nbsp;"
"<option>-V</option>, <option>--del-subuids</option>&nbsp;"
"<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>"
msgstr ""
"<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
@@ -1093,8 +1093,8 @@ msgstr ""
#: usermod.8.xml:409(para)
msgid ""
"This option may be specified multiple times to remove multiple ranges to a "
"users account. When both <option>--del-sub-uids</option> and <option>--add-"
"sub-uids</option> are specified, the removal of all subordinate uid ranges "
"users account. When both <option>--del-subuids</option> and <option>--add-"
"subuids</option> are specified, the removal of all subordinate uid ranges "
"happens before any subordinate uid range is added."
msgstr ""
@@ -1104,7 +1104,7 @@ msgstr ""
#| "<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
#| "replaceable>|<replaceable>RANGE</replaceable>"
msgid ""
"<option>-w</option>, <option>--add-sub-gids</option>&nbsp;"
"<option>-w</option>, <option>--add-subgids</option>&nbsp;"
"<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>"
msgstr ""
"<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
@@ -1136,7 +1136,7 @@ msgstr ""
#| "<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
#| "replaceable>|<replaceable>RANGE</replaceable>"
msgid ""
"<option>-W</option>, <option>--del-sub-gids</option>&nbsp;"
"<option>-W</option>, <option>--del-subgids</option>&nbsp;"
"<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>"
msgstr ""
"<option>-u</option>, <option>--user</option>&nbsp;<replaceable>LOGIN</"
@@ -1151,8 +1151,8 @@ msgstr "移除用户登录的所有 SELinux 用户映射。"
#: usermod.8.xml:447(para)
msgid ""
"This option may be specified multiple times to remove multiple ranges to a "
"users account. When both <option>--del-sub-gids</option> and <option>--add-"
"sub-gids</option> are specified, the removal of all subordinate gid ranges "
"users account. When both <option>--del-subgids</option> and <option>--add-"
"subgids</option> are specified, the removal of all subordinate gid ranges "
"happens before any subordinate gid range is added."
msgstr ""
@@ -5037,7 +5037,7 @@ msgstr "更改用户密码"
#: passwd.1.xml:89(para)
msgid ""
"The <command>passwd</command> command changes passwords for user accounts. A "
"normal user may only change the password for his/her own account, while the "
"normal user may only change the password for their own account, while the "
"superuser may change the password for any account. <command>passwd</command> "
"also changes the account or associated password validity period."
msgstr ""
@@ -5051,7 +5051,7 @@ msgstr "密码更改"
#: passwd.1.xml:99(para)
msgid ""
"The user is first prompted for his/her old password, if one is present. This "
"The user is first prompted for their old password, if one is present. This "
"password is then encrypted and compared against the stored password. The "
"user has only one chance to enter the correct password. The superuser is "
"permitted to bypass this step so that forgotten passwords may be changed."
@@ -5181,7 +5181,7 @@ msgstr "<option>-e</option>, <option>--expire</option>"
#: passwd.1.xml:207(para)
msgid ""
"Immediately expire an account's password. This in effect can force a user to "
"change his/her password at the user's next login."
"change their password at the user's next login."
msgstr "让一个账户的密码立即过期。这可以强制一个用户下次登录时更改密码。"
#: passwd.1.xml:220(term)
@@ -5255,7 +5255,7 @@ msgstr ""
msgid ""
"Set the minimum number of days between password changes to "
"<replaceable>MIN_DAYS</replaceable>. A value of zero for this field "
"indicates that the user may change his/her password at any time."
"indicates that the user may change their password at any time."
msgstr ""
"在密码更改之间的最小天数设置为 <replaceable>MIN_DAYS</replaceable>。此字段中"
"的 0 值表示用户可以在任何时间更改其密码。"
@@ -5316,7 +5316,7 @@ msgstr ""
msgid ""
"Set the number of days of warning before a password change is required. The "
"<replaceable>WARN_DAYS</replaceable> option is the number of days prior to "
"the password expiring that a user will be warned that his/her password is "
"the password expiring that a user will be warned that their password is "
"about to expire."
msgstr ""
"设置在要求更改密码之前警告的天数。<replaceable>WARN_DAYS</replaceable> 选项是"
@@ -7867,7 +7867,7 @@ msgstr "-l"
#: groupmems.8.xml:86(para)
msgid ""
"The <command>groupmems</command> command allows a user to administer his/her "
"The <command>groupmems</command> command allows a user to administer their "
"own group membership list without the requirement of superuser privileges. "
"The <command>groupmems</command> utility is for systems that configure its "
"users to be in their own name sake primary group (i.e., guest / guest)."
@@ -9112,7 +9112,7 @@ msgstr "更改用户密码过期信息"
msgid ""
"The <command>chage</command> command changes the number of days between "
"password changes and the date of the last password change. This information "
"is used by the system to determine when a user must change his/her password."
"is used by the system to determine when a user must change their password."
msgstr ""
#: chage.1.xml:92(para)
@@ -9209,8 +9209,8 @@ msgstr ""
msgid ""
"Set the maximum number of days during which a password is valid. When "
"<replaceable>MAX_DAYS</replaceable> plus <replaceable>LAST_DAY</replaceable> "
"is less than the current day, the user will be required to change his/her "
"password before being able to use his/her account. This occurrence can be "
"is less than the current day, the user will be required to change their "
"password before being able to use their account. This occurrence can be "
"planned for in advance by use of the <option>-W</option> option, which "
"provides the user with advance warning."
msgstr ""
@@ -9240,7 +9240,7 @@ msgstr ""
msgid ""
"Set the number of days of warning before a password change is required. The "
"<replaceable>WARN_DAYS</replaceable> option is the number of days prior to "
"the password expiring that a user will be warned his/her password is about "
"the password expiring that a user will be warned their password is about "
"to expire."
msgstr ""
"设置在要求更改密码之前几天开始警告。<replaceable>WARN_DAYS</replaceable> 选项"
@@ -9267,7 +9267,7 @@ msgstr "<command>chage</command> 需要有一个影子密码文件才可用。"
msgid ""
"The <command>chage</command> command is restricted to the root user, except "
"for the <option>-l</option> option, which may be used by an unprivileged "
"user to determine when his/her password or account is due to expire."
"user to determine when their password or account is due to expire."
msgstr ""
"只有 root 才可以使用 <command>chage</command>,一个特殊情况是 <option>-l</"
"option> 选项,用来让非特权用户觉得自己的密码或账户何时过期。"

View File

@@ -182,6 +182,16 @@
The options which apply to the <command>pwck</command> command are:
</para>
<variablelist remap='IP'>
<varlistentry>
<term>
<option>--badname</option>&nbsp;
</term>
<listitem>
<para>
Allow names that do not conform to standards.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><option>-h</option>, <option>--help</option></term>
<listitem>

View File

@@ -95,18 +95,6 @@
<varlistentry>
<term><emphasis role="bold">encrypted password</emphasis></term>
<listitem>
<para>
Refer to <citerefentry><refentrytitle>crypt</refentrytitle>
<manvolnum>3</manvolnum></citerefentry> for details on how
this string is interpreted.
</para>
<para>
If the password field contains some string that is not a valid
result of <citerefentry><refentrytitle>crypt</refentrytitle>
<manvolnum>3</manvolnum></citerefentry>, for instance ! or *,
the user will not be able to use a unix password to log in
(but the user may log in the system by other means).
</para>
<para>
This field may be empty, in which case no passwords are
required to authenticate as the specified login name.
@@ -120,6 +108,18 @@
line represent the password field before the password was
locked.
</para>
<para>
Refer to <citerefentry><refentrytitle>crypt</refentrytitle>
<manvolnum>3</manvolnum></citerefentry> for details on how
this string is interpreted.
</para>
<para>
If the password field contains some string that is not a valid
result of <citerefentry><refentrytitle>crypt</refentrytitle>
<manvolnum>3</manvolnum></citerefentry>, for instance ! or *,
the user will not be able to use a unix password to log in
(but the user may log in the system by other means).
</para>
</listitem>
</varlistentry>
<varlistentry>

View File

@@ -85,12 +85,16 @@
<cmdsynopsis>
<command>su</command>
<arg choice='opt'>
<replaceable>options</replaceable>
<replaceable>options</replaceable>
</arg>
<arg choice='opt'>
<arg choice='plain'>
<replaceable>username</replaceable>
</arg>
<replaceable>-</replaceable>
</arg>
<arg choice='opt'>
<replaceable>username</replaceable>
<arg choice='opt'>
<replaceable>args</replaceable>
</arg>
</arg>
</cmdsynopsis>
</refsynopsisdiv>
@@ -98,26 +102,21 @@
<refsect1 id='description'>
<title>DESCRIPTION</title>
<para>
The <command>su</command> command is used to become another user during
a login session. Invoked without a <option>username</option>,
<command>su</command> defaults to
becoming the superuser. The optional argument <option>-</option> may
be used to provide an environment similar to what the user would
expect had the user logged in directly.
The <command>su</command> command is used to become another user during a
login session. Invoked without a <option>username</option>,
<command>su</command> defaults to becoming the superuser. The
<option>-</option> option may be used to provide an environment similar
to what the user would expect had the user logged in directly. The
<option>-c</option> option may be used to treat the next argument as a
command by most shells.
</para>
<para>
Additional arguments may be provided after the username, in which case
they are supplied to the user's login shell. In particular, an
argument of <option>-c</option> will cause the next argument to be
treated as a command by most command interpreters. The command will be
executed by the shell specified in <filename>/etc/passwd</filename>
for the target user.
</para>
<para>
You can use the <option>--</option> argument to separate
<command>su</command> options from the arguments supplied to the shell.
Options are recognized everywhere in the argument list. You can use the
<option>--</option> argument to stop option parsing. The
<option>-</option> option is special: it is also recognized after
<option>--</option>, but has to be placed before
<option>username</option>.
</para>
<para>The user will be prompted for a password, if appropriate. Invalid

View File

@@ -32,6 +32,7 @@
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
<!ENTITY CREATE_HOME SYSTEM "login.defs.d/CREATE_HOME.xml">
<!ENTITY GID_MAX SYSTEM "login.defs.d/GID_MAX.xml">
<!ENTITY LASTLOG_UID_MAX SYSTEM "login.defs.d/LASTLOG_UID_MAX.xml">
<!ENTITY MAIL_DIR SYSTEM "login.defs.d/MAIL_DIR.xml">
<!ENTITY MAX_MEMBERS_PER_GROUP SYSTEM "login.defs.d/MAX_MEMBERS_PER_GROUP.xml">
<!ENTITY PASS_MAX_DAYS SYSTEM "login.defs.d/PASS_MAX_DAYS.xml">
@@ -125,6 +126,16 @@
<para>The options which apply to the <command>useradd</command> command are:
</para>
<variablelist remap='IP'>
<varlistentry>
<term>
<option>--badname</option>&nbsp;
</term>
<listitem>
<para>
Allow names that do not conform to standards.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<option>-b</option>, <option>--base-dir</option>&nbsp;<replaceable>BASE_DIR</replaceable>
@@ -453,6 +464,23 @@
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<option>-P</option>, <option>--prefix</option>&nbsp;<replaceable>PREFIX_DIR</replaceable>
</term>
<listitem>
<para>
Apply changes in the <replaceable>PREFIX_DIR</replaceable>
directory and use the configuration files from the
<replaceable>PREFIX_DIR</replaceable> directory.
This option does not chroot and is intended for preparing
a cross-compilation target.
Some limitations: NIS and LDAP users/groups are not verified.
PAM authentication is using the host files.
No SELINUX support.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<option>-s</option>, <option>--shell</option>&nbsp;<replaceable>SHELL</replaceable>
@@ -653,6 +681,7 @@
<variablelist>
&CREATE_HOME;
&GID_MAX; <!-- documents also GID_MIN -->
&LASTLOG_UID_MAX;
&MAIL_DIR;
&MAX_MEMBERS_PER_GROUP;
&PASS_MAX_DAYS;

View File

@@ -154,6 +154,23 @@
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<option>-P</option>, <option>--prefix</option>&nbsp;<replaceable>PREFIX_DIR</replaceable>
</term>
<listitem>
<para>
Apply changes in the <replaceable>PREFIX_DIR</replaceable>
directory and use the configuration files from the
<replaceable>PREFIX_DIR</replaceable> directory.
This option does not chroot and is intended for preparing
a cross-compilation target.
Some limitations: NIS and LDAP users/groups are not verified.
PAM authentication is using the host files.
No SELINUX support.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<option>-Z</option>, <option>--selinux-user</option>

View File

@@ -30,6 +30,7 @@
-->
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V4.5//EN"
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
<!ENTITY LASTLOG_UID_MAX SYSTEM "login.defs.d/LASTLOG_UID_MAX.xml">
<!ENTITY MAIL_DIR SYSTEM "login.defs.d/MAIL_DIR.xml">
<!ENTITY MAX_MEMBERS_PER_GROUP SYSTEM "login.defs.d/MAX_MEMBERS_PER_GROUP.xml">
<!ENTITY SUB_GID_COUNT SYSTEM "login.defs.d/SUB_GID_COUNT.xml">
@@ -107,6 +108,26 @@
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<option>-b</option>, <option>--badnames</option>
</term>
<listitem>
<para>
Allow names that do not conform to standards.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<option>-b</option>, <option>--badnames</option>
</term>
<listitem>
<para>
Allow names that do not conform to standards.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<option>-c</option>, <option>--comment</option>&nbsp;<replaceable>COMMENT</replaceable>
@@ -319,6 +340,23 @@
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<option>-P</option>, <option>--prefix</option>&nbsp;<replaceable>PREFIX_DIR</replaceable>
</term>
<listitem>
<para>
Apply changes in the <replaceable>PREFIX_DIR</replaceable>
directory and use the configuration files from the
<replaceable>PREFIX_DIR</replaceable> directory.
This option does not chroot and is intended for preparing
a cross-compilation target.
Some limitations: NIS and LDAP users/groups are not verified.
PAM authentication is using the host files.
No SELINUX support.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
<option>-s</option>, <option>--shell</option>&nbsp;<replaceable>SHELL</replaceable>
@@ -382,7 +420,7 @@
</varlistentry>
<varlistentry condition="subids">
<term>
<option>-v</option>, <option>--add-sub-uids</option>&nbsp;<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>
<option>-v</option>, <option>--add-subuids</option>&nbsp;<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>
</term>
<listitem>
<para>
@@ -400,7 +438,7 @@
</varlistentry>
<varlistentry condition="subids">
<term>
<option>-V</option>, <option>--del-sub-uids</option>&nbsp;<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>
<option>-V</option>, <option>--del-subuids</option>&nbsp;<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>
</term>
<listitem>
<para>
@@ -408,7 +446,7 @@
</para>
<para>
This option may be specified multiple times to remove multiple ranges to a users account.
When both <option>--del-sub-uids</option> and <option>--add-sub-uids</option> are specified,
When both <option>--del-subuids</option> and <option>--add-subuids</option> are specified,
the removal of all subordinate uid ranges happens before any subordinate uid range is added.
</para>
<para>
@@ -420,7 +458,7 @@
</varlistentry>
<varlistentry condition="subids">
<term>
<option>-w</option>, <option>--add-sub-gids</option>&nbsp;<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>
<option>-w</option>, <option>--add-subgids</option>&nbsp;<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>
</term>
<listitem>
<para>
@@ -438,7 +476,7 @@
</varlistentry>
<varlistentry condition="subids">
<term>
<option>-W</option>, <option>--del-sub-gids</option>&nbsp;<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>
<option>-W</option>, <option>--del-subgids</option>&nbsp;<replaceable>FIRST</replaceable>-<replaceable>LAST</replaceable>
</term>
<listitem>
<para>
@@ -446,7 +484,7 @@
</para>
<para>
This option may be specified multiple times to remove multiple ranges to a users account.
When both <option>--del-sub-gids</option> and <option>--add-sub-gids</option> are specified,
When both <option>--del-subgids</option> and <option>--add-subgids</option> are specified,
the removal of all subordinate gid ranges happens before any subordinate gid range is added.
</para>
<para>
@@ -500,6 +538,7 @@
tool:
</para>
<variablelist>
&LASTLOG_UID_MAX;
&MAIL_DIR; <!-- documents also MAIL_FILE -->
&MAX_MEMBERS_PER_GROUP;
&SUB_GID_COUNT; <!-- documents also SUB_GID_MAX and SUB_GID_MIN -->

View File

@@ -45,10 +45,13 @@ libmisc/entry.c
libmisc/env.c
libmisc/failure.c
libmisc/find_new_gid.c
libmisc/find_new_sub_gids.c
libmisc/find_new_sub_uids.c
libmisc/find_new_uid.c
libmisc/getgr_nam_gid.c
libmisc/getrange.c
libmisc/hushed.c
libmisc/idmapping.c
libmisc/isexpired.c
libmisc/limits.c
libmisc/list.c
@@ -59,6 +62,7 @@ libmisc/motd.c
libmisc/myname.c
libmisc/obscure.c
libmisc/pam_pass.c
libmisc/pam_pass_non_interactive.c
libmisc/pwd2spwd.c
libmisc/pwdcheck.c
libmisc/pwd_init.c
@@ -75,6 +79,7 @@ libmisc/sulog.c
libmisc/ttytype.c
libmisc/tz.c
libmisc/ulimit.c
libmisc/user_busy.c
libmisc/utmp.c
libmisc/valid.c
libmisc/xgetXXbyYY.c
@@ -101,7 +106,9 @@ src/lastlog.c
src/login.c
src/login_nopam.c
src/logoutd.c
src/newgidmap.c
src/newgrp.c
src/newuidmap.c
src/newusers.c
src/passwd.c
src/pwck.c

View File

@@ -113,12 +113,10 @@ msgid "Cannot init SELinux management\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: unknown member %s\n"
msgid "Cannot create SELinux user key\n"
msgstr "%s: nepoznat član %s\n"
#, fuzzy, c-format
#| msgid "%s: unknown member %s\n"
msgid "Cannot verify the SELinux user\n"
msgstr "%s: nepoznat član %s\n"
@@ -151,7 +149,6 @@ msgid "%s: out of memory\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: unknown member %s\n"
msgid "%s: Cannot stat %s: %s\n"
msgstr "%s: nepoznat član %s\n"
@@ -204,7 +201,6 @@ msgid "%s: Cannot change owners of %s: %s\n"
msgstr "nepoznata grupa: %s\n"
#, fuzzy, c-format
#| msgid "%s: unknown member %s\n"
msgid "%s: Cannot lstat %s: %s\n"
msgstr "%s: nepoznat član %s\n"
@@ -223,7 +219,6 @@ msgid "%s: mkdir: %s: %s\n"
msgstr "nepoznata grupa: %s\n"
#, fuzzy, c-format
#| msgid "%s: unknown member %s\n"
msgid "%s: Cannot open %s: %s\n"
msgstr "%s: nepoznat član %s\n"
@@ -485,7 +480,7 @@ msgid ""
msgstr ""
msgid ""
" -M, --maxdays MAX_DAYS set maximim number of days before password\n"
" -M, --maxdays MAX_DAYS set maximum number of days before password\n"
" change to MAX_DAYS\n"
msgstr ""
@@ -575,12 +570,10 @@ msgid "%s: PAM: %s\n"
msgstr "nepoznata grupa: %s\n"
#, fuzzy, c-format
#| msgid "%s: Try again later\n"
msgid "%s: cannot lock %s; try again later.\n"
msgstr "%s: Pokušajte ponovo kasnije\n"
#, fuzzy, c-format
#| msgid "%s: unknown member %s\n"
msgid "%s: cannot open %s\n"
msgstr "%s: nepoznat član %s\n"
@@ -1014,7 +1007,6 @@ msgid "%s: -K requires KEY=VALUE\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: group %s exists\n"
msgid "%s: group '%s' already exists\n"
msgstr "%s: grupa %s postoji\n"
@@ -1023,7 +1015,6 @@ msgid "%s: GID '%lu' already exists\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: unknown member %s\n"
msgid "%s: Cannot setup cleanup service.\n"
msgstr "%s: nepoznat član %s\n"
@@ -1222,7 +1213,6 @@ msgid "%s: no changes\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: unknown member %s\n"
msgid "%s: cannot delete %s\n"
msgstr "%s: nepoznat član %s\n"
@@ -1347,7 +1337,6 @@ msgid "Login incorrect"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: unknown member %s\n"
msgid "Cannot find user (%s)\n"
msgstr "%s: nepoznat član %s\n"
@@ -1601,7 +1590,6 @@ msgid "%s: password changed.\n"
msgstr "Šifra:"
#, fuzzy, c-format
#| msgid "Password Expiration Warning"
msgid "%s: password expiry information changed.\n"
msgstr "Upozorenje o isteku šifre"
@@ -1642,7 +1630,6 @@ msgid "invalid user ID '%lu'\n"
msgstr ""
#, fuzzy, c-format
#| msgid "Adding user %s to group %s\n"
msgid "user '%s': no group %lu\n"
msgstr "Dodajem korisnika %s grupi %s\n"
@@ -1667,7 +1654,6 @@ msgid "failed to create tcb directory for %s\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: unknown member %s\n"
msgid "%s: cannot lock %s.\n"
msgstr "%s: nepoznat član %s\n"
@@ -1716,7 +1702,6 @@ msgid "Please enter your OWN password as authentication.\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: unknown member %s\n"
msgid "%s: Cannot fork user shell\n"
msgstr "%s: nepoznat član %s\n"
@@ -1797,7 +1782,6 @@ msgid "%s: Cannot drop the controlling terminal\n"
msgstr "nepoznata grupa: %s\n"
#, fuzzy, c-format
#| msgid "%s: unknown member %s\n"
msgid "Cannot execute %s\n"
msgstr "%s: nepoznat član %s\n"
@@ -2093,7 +2077,6 @@ msgid "%s: Can't allocate memory, tcb entry for %s not removed.\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: unknown member %s\n"
msgid "%s: Cannot drop privileges: %s\n"
msgstr "%s: nepoznat član %s\n"
@@ -2150,7 +2133,7 @@ msgstr ""
msgid ""
" -a, --append append the user to the supplemental GROUPS\n"
" mentioned by the -G option without removing\n"
" him/her from other groups\n"
" the user from other groups\n"
msgstr ""
msgid " -l, --login NEW_LOGIN new value of the login name\n"
@@ -2214,7 +2197,6 @@ msgid "%s: invalid subordinate gid range '%s'\n"
msgstr "nepoznata grupa: %s\n"
#, fuzzy, c-format
#| msgid "%s: unknown member %s\n"
msgid "%s: no options\n"
msgstr "%s: nepoznat član %s\n"

View File

@@ -46,7 +46,6 @@ msgid "%s: nscd did not terminate normally (signal %d)\n"
msgstr "%s: nscd no ha acabat correctament (senyal %d)\n"
#, fuzzy, c-format
#| msgid "%s: nscd exited with status %d"
msgid "%s: nscd exited with status %d\n"
msgstr "%s: «nscd» ha sortit amb l'estat %d"
@@ -430,7 +429,6 @@ msgid "%s: cannot access chroot directory %s: %s\n"
msgstr "%s: no es pot accedir al directori «chroot» %s: %s\n"
#, fuzzy, c-format
#| msgid "%s: cannot access chroot directory %s: %s\n"
msgid "%s: cannot chdir to chroot directory %s: %s\n"
msgstr "%s: no es pot accedir al directori «chroot» %s: %s\n"
@@ -518,8 +516,9 @@ msgstr ""
" -m, --mindays DIES_MÍN estableix el número mínim de dies abans\n"
" del canvi de contrasenya a DIES_MÍN\n"
#, fuzzy
msgid ""
" -M, --maxdays MAX_DAYS set maximim number of days before password\n"
" -M, --maxdays MAX_DAYS set maximum number of days before password\n"
" change to MAX_DAYS\n"
msgstr ""
" -M, --maxdays DIES_MÀX estableix el número màxim de dies abans\n"
@@ -808,7 +807,6 @@ msgid "%s: line %d: missing new password\n"
msgstr "%s: línia %d: manca la nova contrasenya\n"
#, fuzzy, c-format
#| msgid "%s: Failed to write %s: %s\n"
msgid "%s: failed to crypt password with salt '%s': %s\n"
msgstr "%s: Error en escriure %s: %s\n"
@@ -1131,8 +1129,6 @@ msgid "%s: Cannot setup cleanup service.\n"
msgstr "%s: no es pot configurar el servei de neteja.\n"
#, fuzzy
#| msgid ""
#| " -r, --reset reset the counters of login failures\n"
msgid ""
" -f, --force delete group even if it is the primary group "
"of a user\n"
@@ -1371,8 +1367,6 @@ msgstr ""
" antics que DIES\n"
#, fuzzy
#| msgid ""
#| " -a, --all display faillog records for all users\n"
msgid ""
" -C, --clear clear lastlog record of an user (usable only "
"with -u)\n"
@@ -1381,8 +1375,6 @@ msgstr ""
"els usuaris\n"
#, fuzzy
#| msgid ""
#| " -a, --all display faillog records for all users\n"
msgid ""
" -S, --set set lastlog record to current time (usable "
"only with -u)\n"
@@ -1412,12 +1404,10 @@ msgid "**Never logged in**"
msgstr "**No ha entrat mai**"
#, fuzzy, c-format
#| msgid "%s: Failed to get the entry for UID %lu\n"
msgid "%s: Failed to update the entry for UID %lu\n"
msgstr "%s: No s'ha pogut obtenir l'entrada de la UID %lu\n"
#, fuzzy, c-format
#| msgid "%s: can't update password file\n"
msgid "%s: Failed to update the lastlog file\n"
msgstr "%s: no es pot actualitzar el fitxer de contrasenyes\n"
@@ -1551,7 +1541,6 @@ msgid "Usage: sg group [[-c] command]\n"
msgstr "Forma d'ús: sg grup [[-c] ordre]\n"
#, fuzzy, c-format
#| msgid "%s: Failed to write %s: %s\n"
msgid "%s: failed to crypt password with previous salt: %s\n"
msgstr "%s: Error en escriure %s: %s\n"
@@ -1625,17 +1614,14 @@ msgid "%s: line %d: can't update entry\n"
msgstr "%s: línia %d: no es pot actualitzar l'entrada\n"
#, fuzzy, c-format
#| msgid "%s: failed to prepare the new %s entry '%s'\n"
msgid "%s: failed to prepare new %s entry\n"
msgstr "%s: ha fallat la preparació de la nova entrada %s: «%s»\n"
#, fuzzy, c-format
#| msgid "%s: can't create user\n"
msgid "%s: can't find subordinate user range\n"
msgstr "%s: no es pot generar l'usuari\n"
#, fuzzy, c-format
#| msgid "%s: can't update group file\n"
msgid "%s: can't find subordinate group range\n"
msgstr "%s: no es pot actualitzar el fitxer de grups\n"
@@ -2051,7 +2037,6 @@ msgid "%s: line too long in %s: %s..."
msgstr "%s: línia massa llarga a %s: %s..."
#, fuzzy, c-format
#| msgid "%s: Cannot create symbolic link %s: %s\n"
msgid "%s: Cannot create backup file (%s): %s\n"
msgstr "%s: no es pot generar l'enllaç simbòlic %s: %s\n"
@@ -2226,7 +2211,6 @@ msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
msgstr "%s: ha fallat el restabliment del darrer registre de UID %lu: %s\n"
#, fuzzy, c-format
#| msgid "%s: failed to prepare the new %s entry '%s'\n"
msgid "%s: failed to prepare the new %s entry\n"
msgstr "%s: ha fallat la preparació de la nova entrada %s: «%s»\n"
@@ -2274,12 +2258,10 @@ msgid "%s: can't create group\n"
msgstr "%s: no es pot generar el grup\n"
#, fuzzy, c-format
#| msgid "%s: can't create user\n"
msgid "%s: can't create subordinate user IDs\n"
msgstr "%s: no es pot generar l'usuari\n"
#, fuzzy, c-format
#| msgid "%s: can't create group\n"
msgid "%s: can't create subordinate group IDs\n"
msgstr "%s: no es pot generar el grup\n"
@@ -2333,7 +2315,6 @@ msgstr ""
"usuari.\n"
#, fuzzy, c-format
#| msgid "%s: cannot remove entry '%s' from %s\n"
msgid "%s: cannot remove entry %lu from %s\n"
msgstr "%s: no es pot eliminar l'entrada «%s» de %s\n"
@@ -2423,7 +2404,7 @@ msgstr " -G, --groups GRUPS llista de GRUPS addicionals\n"
msgid ""
" -a, --append append the user to the supplemental GROUPS\n"
" mentioned by the -G option without removing\n"
" him/her from other groups\n"
" the user from other groups\n"
msgstr ""
" -a, --append afegeix l'usuari als GRUPS addicionals\n"
" llistats amb la opció -G sense eliminar-los\n"
@@ -2492,12 +2473,10 @@ msgid "%s: user '%s' already exists in %s\n"
msgstr "%s: l'usuari «%s» ja existeix a %s\n"
#, fuzzy, c-format
#| msgid "%s: invalid date '%s'\n"
msgid "%s: invalid subordinate uid range '%s'\n"
msgstr "%s: la data «%s» no és vàlida\n"
#, fuzzy, c-format
#| msgid "%s: invalid date '%s'\n"
msgid "%s: invalid subordinate gid range '%s'\n"
msgstr "%s: la data «%s» no és vàlida\n"
@@ -2518,7 +2497,6 @@ msgid "%s: UID '%lu' already exists\n"
msgstr "%s: UID '%lu' ja existeix\n"
#, fuzzy, c-format
#| msgid "%s: %s is not authorized to change the password of %s\n"
msgid "%s: %s does not exist, you cannot use the flags %s or %s\n"
msgstr "%s: %s no està autoritzat per canviar la contrasenya de %s\n"
@@ -2570,22 +2548,18 @@ msgid "failed to rename mailbox"
msgstr "no s'ha pogut reanomenar la bústia de correu"
#, fuzzy, c-format
#| msgid "%s: failed to prepare the new %s entry '%s'\n"
msgid "%s: failed to remove uid range %lu-%lu from '%s'\n"
msgstr "%s: ha fallat la preparació de la nova entrada %s: «%s»\n"
#, fuzzy, c-format
#| msgid "%s: failed to prepare the new %s entry '%s'\n"
msgid "%s: failed to add uid range %lu-%lu from '%s'\n"
msgstr "%s: ha fallat la preparació de la nova entrada %s: «%s»\n"
#, fuzzy, c-format
#| msgid "%s: failed to prepare the new %s entry '%s'\n"
msgid "%s: failed to remove gid range %lu-%lu from '%s'\n"
msgstr "%s: ha fallat la preparació de la nova entrada %s: «%s»\n"
#, fuzzy, c-format
#| msgid "%s: failed to prepare the new %s entry '%s'\n"
msgid "%s: failed to add gid range %lu-%lu from '%s'\n"
msgstr "%s: ha fallat la preparació de la nova entrada %s: «%s»\n"
@@ -2645,12 +2619,10 @@ msgid "Couldn't make backup"
msgstr "No s'ha pogut fer una còpia de seguretat"
#, fuzzy, c-format
#| msgid "%s: PAM: %s\n"
msgid "%s: %s: %s\n"
msgstr "%s: PAM: %s\n"
#, fuzzy, c-format
#| msgid "%s: nscd exited with status %d"
msgid "%s: %s returned with status %d\n"
msgstr "%s: «nscd» ha sortit amb l'estat %d"
@@ -2968,7 +2940,7 @@ msgstr "%s: no es pot trobar el directori «tcb» per %s\n"
#~ "GROUPS\n"
#~ " mentioned by the -G option without "
#~ "removing\n"
#~ " him/her from other groups\n"
#~ " the user from other groups\n"
#~ " -h, --help display this help message and exit\n"
#~ " -l, --login NEW_LOGIN new value of the login name\n"
#~ " -L, --lock lock the user account\n"

663
po/cs.po

File diff suppressed because it is too large Load Diff

View File

@@ -57,7 +57,6 @@ msgid "%s: nscd did not terminate normally (signal %d)\n"
msgstr "%s: nscd afsluttedes ikke normalt (signal %d)\n"
#, fuzzy, c-format
#| msgid "%s: nscd exited with status %d"
msgid "%s: nscd exited with status %d\n"
msgstr "%s: nscd afsluttede med status %d"
@@ -436,7 +435,6 @@ msgid "%s: cannot access chroot directory %s: %s\n"
msgstr "%s: Kan ikke tilgå chroot-mappe %s: %s\n"
#, fuzzy, c-format
#| msgid "%s: cannot access chroot directory %s: %s\n"
msgid "%s: cannot chdir to chroot directory %s: %s\n"
msgstr "%s: Kan ikke tilgå chroot-mappe %s: %s\n"
@@ -519,8 +517,9 @@ msgstr ""
" -m, --mindays MIN_DAGE sæt minimalt antal dage inden\n"
" adgangskodeændring til MIN_DAGE\n"
#, fuzzy
msgid ""
" -M, --maxdays MAX_DAYS set maximim number of days before password\n"
" -M, --maxdays MAX_DAYS set maximum number of days before password\n"
" change to MAX_DAYS\n"
msgstr ""
" -M, --maxdays MAKS_DAGE sæt maksimalt antal dage inden\n"
@@ -798,7 +797,6 @@ msgid "%s: line %d: missing new password\n"
msgstr "%s: Linje %d: Mangler ny adgangskode\n"
#, fuzzy, c-format
#| msgid "%s: Failed to write %s: %s\n"
msgid "%s: failed to crypt password with salt '%s': %s\n"
msgstr "%s: Kunne ikke skrive %s: %s\n"
@@ -1104,8 +1102,6 @@ msgid "%s: Cannot setup cleanup service.\n"
msgstr "%s: Kan ikke opsætte tjenesten cleanup.\n"
#, fuzzy
#| msgid ""
#| " -r, --reset reset the counters of login failures\n"
msgid ""
" -f, --force delete group even if it is the primary group "
"of a user\n"
@@ -1343,16 +1339,12 @@ msgstr ""
" end DAGE\n"
#, fuzzy
#| msgid ""
#| " -a, --all display faillog records for all users\n"
msgid ""
" -C, --clear clear lastlog record of an user (usable only "
"with -u)\n"
msgstr " -a, --all vis faillog-poster for alle brugere\n"
#, fuzzy
#| msgid ""
#| " -a, --all display faillog records for all users\n"
msgid ""
" -S, --set set lastlog record to current time (usable "
"only with -u)\n"
@@ -1381,12 +1373,10 @@ msgid "**Never logged in**"
msgstr "**Har aldrig logget på**"
#, fuzzy, c-format
#| msgid "%s: Failed to get the entry for UID %lu\n"
msgid "%s: Failed to update the entry for UID %lu\n"
msgstr "%s: Kunne ikke indhente punktet for UID %lu\n"
#, fuzzy, c-format
#| msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
msgid "%s: Failed to update the lastlog file\n"
msgstr "%s: Kunne ikke nulstille lastlog-punktet for UID %lu: %s\n"
@@ -1519,7 +1509,6 @@ msgid "Usage: sg group [[-c] command]\n"
msgstr "Brug: sg gruppe [[-c] kommando]\n"
#, fuzzy, c-format
#| msgid "%s: Failed to write %s: %s\n"
msgid "%s: failed to crypt password with previous salt: %s\n"
msgstr "%s: Kunne ikke skrive %s: %s\n"
@@ -1590,17 +1579,14 @@ msgid "%s: line %d: can't update entry\n"
msgstr "%s: Linje %d: Kan ikke opdatere punktet\n"
#, fuzzy, c-format
#| msgid "%s: failed to prepare the new %s entry '%s'\n"
msgid "%s: failed to prepare new %s entry\n"
msgstr "%s: Kunne ikke forberede det nye %s-punkt »%s«\n"
#, fuzzy, c-format
#| msgid "%s: can't create user\n"
msgid "%s: can't find subordinate user range\n"
msgstr "%s: Kan ikke oprette bruger\n"
#, fuzzy, c-format
#| msgid "%s: can't create group\n"
msgid "%s: can't find subordinate group range\n"
msgstr "%s: Kan ikke oprette gruppe\n"
@@ -2007,7 +1993,6 @@ msgid "%s: line too long in %s: %s..."
msgstr "%s: Linje for lang i %s: %s..."
#, fuzzy, c-format
#| msgid "%s: Cannot create symbolic link %s: %s\n"
msgid "%s: Cannot create backup file (%s): %s\n"
msgstr "%s: Kan ikke oprette symbolsk henvisning %s: %s\n"
@@ -2180,7 +2165,6 @@ msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
msgstr "%s: Kunne ikke nulstille lastlog-punktet for UID %lu: %s\n"
#, fuzzy, c-format
#| msgid "%s: failed to prepare the new %s entry '%s'\n"
msgid "%s: failed to prepare the new %s entry\n"
msgstr "%s: Kunne ikke forberede det nye %s-punkt »%s«\n"
@@ -2228,12 +2212,10 @@ msgid "%s: can't create group\n"
msgstr "%s: Kan ikke oprette gruppe\n"
#, fuzzy, c-format
#| msgid "%s: can't create user\n"
msgid "%s: can't create subordinate user IDs\n"
msgstr "%s: Kan ikke oprette bruger\n"
#, fuzzy, c-format
#| msgid "%s: can't create group\n"
msgid "%s: can't create subordinate group IDs\n"
msgstr "%s: Kan ikke oprette gruppe\n"
@@ -2284,7 +2266,6 @@ msgstr ""
"%s: Gruppe %s er den primære gruppe for en anden bruger og fjernes ikke.\n"
#, fuzzy, c-format
#| msgid "%s: cannot remove entry '%s' from %s\n"
msgid "%s: cannot remove entry %lu from %s\n"
msgstr "%s: Kan ikke fjerne punkt »%s« fra %s\n"
@@ -2370,7 +2351,7 @@ msgstr " -G, --groups GRUPPER ny liste med supplerende grupper\n"
msgid ""
" -a, --append append the user to the supplemental GROUPS\n"
" mentioned by the -G option without removing\n"
" him/her from other groups\n"
" the user from other groups\n"
msgstr ""
" -a, --append tilføj brugeren til de supplementære "
"GRUPPER\n"
@@ -2443,12 +2424,10 @@ msgid "%s: user '%s' already exists in %s\n"
msgstr "%s: Brugeren »%s« findes allerede i %s\n"
#, fuzzy, c-format
#| msgid "%s: invalid date '%s'\n"
msgid "%s: invalid subordinate uid range '%s'\n"
msgstr "%s: Ugyldig dato »%s«\n"
#, fuzzy, c-format
#| msgid "%s: invalid date '%s'\n"
msgid "%s: invalid subordinate gid range '%s'\n"
msgstr "%s: Ugyldig dato »%s«\n"
@@ -2469,7 +2448,6 @@ msgid "%s: UID '%lu' already exists\n"
msgstr "%s: UID »%lu« findes allerede\n"
#, fuzzy, c-format
#| msgid "%s: %s is not authorized to change the password of %s\n"
msgid "%s: %s does not exist, you cannot use the flags %s or %s\n"
msgstr "%s: %s er ikke godkendt til at ændre adgangskoden på %s\n"
@@ -2518,22 +2496,18 @@ msgid "failed to rename mailbox"
msgstr "kunne ikke omdøbe postkasse"
#, fuzzy, c-format
#| msgid "%s: failed to prepare the new %s entry '%s'\n"
msgid "%s: failed to remove uid range %lu-%lu from '%s'\n"
msgstr "%s: Kunne ikke forberede det nye %s-punkt »%s«\n"
#, fuzzy, c-format
#| msgid "%s: failed to prepare the new %s entry '%s'\n"
msgid "%s: failed to add uid range %lu-%lu from '%s'\n"
msgstr "%s: Kunne ikke forberede det nye %s-punkt »%s«\n"
#, fuzzy, c-format
#| msgid "%s: failed to prepare the new %s entry '%s'\n"
msgid "%s: failed to remove gid range %lu-%lu from '%s'\n"
msgstr "%s: Kunne ikke forberede det nye %s-punkt »%s«\n"
#, fuzzy, c-format
#| msgid "%s: failed to prepare the new %s entry '%s'\n"
msgid "%s: failed to add gid range %lu-%lu from '%s'\n"
msgstr "%s: Kunne ikke forberede det nye %s-punkt »%s«\n"
@@ -2591,12 +2565,10 @@ msgid "Couldn't make backup"
msgstr "Kunne ikke lave sikkerhedskopi"
#, fuzzy, c-format
#| msgid "%s: PAM: %s\n"
msgid "%s: %s: %s\n"
msgstr "%s: PAM: %s\n"
#, fuzzy, c-format
#| msgid "%s: nscd exited with status %d"
msgid "%s: %s returned with status %d\n"
msgstr "%s: nscd afsluttede med status %d"

698
po/de.po
View File

@@ -1,16 +1,16 @@
# shadow de.po
# Copyright (C) 1999 Free Software Foundation, Inc.
# Frank Schmid <frank@cs-schmid.de>, 2002
# Holger Wansing <linux@wansing-online.de>, 2006, 2008, 2009, 2011, 2012.
# Holger Wansing <linux@wansing-online.de>, 2006, 2008, 2009, 2011, 2012, 2014.
# Patches, suggestions, etc welcome.
#
msgid ""
msgstr ""
"Project-Id-Version: shadow 4.1.4.2\n"
"Project-Id-Version: shadow 4.2-2\n"
"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
"POT-Creation-Date: 2016-09-18 14:03-0500\n"
"PO-Revision-Date: 2012-01-18 21:44+0100\n"
"Last-Translator: Holger Wansing <linux@wansing-online.de>\n"
"PO-Revision-Date: 2014-07-27 23:06+0200\n"
"Last-Translator: Holger Wansing <hwansing@mailbox.org>\n"
"Language-Team: German <debian-l10n-german@lists.debian.org>\n"
"Language: de\n"
"MIME-Version: 1.0\n"
@@ -47,10 +47,9 @@ msgstr ""
msgid "%s: nscd did not terminate normally (signal %d)\n"
msgstr "%s: nscd wurde nicht normal beendet (Signal %d)\n"
#, fuzzy, c-format
#| msgid "%s: nscd exited with status %d"
#, c-format
msgid "%s: nscd exited with status %d\n"
msgstr "%s: nscd wurde mit Status %d beendet"
msgstr "%s: nscd wurde mit Status %d beendet\n"
msgid "Password: "
msgstr "Passwort: "
@@ -430,7 +429,6 @@ msgid "%s: cannot access chroot directory %s: %s\n"
msgstr "%s: auf chroot-Verzeichnis %s kann nicht zugegriffen werden: %s\n"
#, fuzzy, c-format
#| msgid "%s: cannot access chroot directory %s: %s\n"
msgid "%s: cannot chdir to chroot directory %s: %s\n"
msgstr "%s: auf chroot-Verzeichnis %s kann nicht zugegriffen werden: %s\n"
@@ -515,8 +513,9 @@ msgstr ""
" -m, --mindays MIN_TAGE Minimale Anzahl der Tage vor\n"
" Passwortänderung auf MIN_TAGE setzen\n"
#, fuzzy
msgid ""
" -M, --maxdays MAX_DAYS set maximim number of days before password\n"
" -M, --maxdays MAX_DAYS set maximum number of days before password\n"
" change to MAX_DAYS\n"
msgstr ""
" -M, --maxdays MAX_TAGE Maximale Anzahl der Tage vor\n"
@@ -803,7 +802,6 @@ msgid "%s: line %d: missing new password\n"
msgstr "%s: Zeile %d: Neues Passwort fehlt\n"
#, fuzzy, c-format
#| msgid "%s: Failed to write %s: %s\n"
msgid "%s: failed to crypt password with salt '%s': %s\n"
msgstr "%s: Schreiben von %s fehlgeschlagen: %s\n"
@@ -1121,8 +1119,6 @@ msgid "%s: Cannot setup cleanup service.\n"
msgstr "%s: Ihr Benutzername konnte nicht bestimmt werden.\n"
#, fuzzy
#| msgid ""
#| " -r, --reset reset the counters of login failures\n"
msgid ""
" -f, --force delete group even if it is the primary group "
"of a user\n"
@@ -1367,8 +1363,6 @@ msgstr ""
" als TAGE sind\n"
#, fuzzy
#| msgid ""
#| " -a, --all display faillog records for all users\n"
msgid ""
" -C, --clear clear lastlog record of an user (usable only "
"with -u)\n"
@@ -1377,8 +1371,6 @@ msgstr ""
" für alle Benutzer anzeigen\n"
#, fuzzy
#| msgid ""
#| " -a, --all display faillog records for all users\n"
msgid ""
" -S, --set set lastlog record to current time (usable "
"only with -u)\n"
@@ -1409,12 +1401,10 @@ msgid "**Never logged in**"
msgstr "**Noch nie angemeldet**"
#, fuzzy, c-format
#| msgid "%s: Failed to get the entry for UID %lu\n"
msgid "%s: Failed to update the entry for UID %lu\n"
msgstr "%s: Auslesen des Eintrags für UID %lu fehlgeschlagen\n"
#, fuzzy, c-format
#| msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
msgid "%s: Failed to update the lastlog file\n"
msgstr "%s: Zurücksetzen des lastlog-Eintrags für UID %lu fehlgeschlagen: %s\n"
@@ -1549,7 +1539,6 @@ msgid "Usage: sg group [[-c] command]\n"
msgstr "Aufruf: sg Gruppe [[-c] Befehl]\n"
#, fuzzy, c-format
#| msgid "%s: Failed to write %s: %s\n"
msgid "%s: failed to crypt password with previous salt: %s\n"
msgstr "%s: Schreiben von %s fehlgeschlagen: %s\n"
@@ -1622,17 +1611,14 @@ msgid "%s: line %d: can't update entry\n"
msgstr "%s: Zeile %d: Eintrag kann nicht aktualisiert werden.\n"
#, fuzzy, c-format
#| msgid "%s: failed to prepare the new %s entry '%s'\n"
msgid "%s: failed to prepare new %s entry\n"
msgstr "%s: Vorbereiten des neuen %s-Eintrags »%s« fehlgeschlagen.\n"
#, fuzzy, c-format
#| msgid "%s: can't create user\n"
msgid "%s: can't find subordinate user range\n"
msgstr "%s: Benutzer kann nicht erstellt werden\n"
#, fuzzy, c-format
#| msgid "%s: can't create group\n"
msgid "%s: can't find subordinate group range\n"
msgstr "%s: Gruppe kann nicht erzeugt werden\n"
@@ -2044,10 +2030,9 @@ msgstr "%s: Neue defaults-Datei kann nicht geöffnet werden.\n"
msgid "%s: line too long in %s: %s..."
msgstr "%s: Zeile zu lang in %s: %s..."
#, fuzzy, c-format
#| msgid "%s: Cannot create symbolic link %s: %s\n"
#, c-format
msgid "%s: Cannot create backup file (%s): %s\n"
msgstr "%s: Symbolische Verknüpfung %s kann nicht erstellt werden: %s\n"
msgstr "%s: Sicherungsdatei kann nicht erstellt werden (%s): %s\n"
#, c-format
msgid "%s: rename: %s: %s\n"
@@ -2230,7 +2215,6 @@ msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
msgstr "%s: Zurücksetzen des lastlog-Eintrags für UID %lu fehlgeschlagen: %s\n"
#, fuzzy, c-format
#| msgid "%s: failed to prepare the new %s entry '%s'\n"
msgid "%s: failed to prepare the new %s entry\n"
msgstr "%s: Vorbereiten des neuen %s-Eintrags »%s« fehlgeschlagen.\n"
@@ -2278,12 +2262,10 @@ msgid "%s: can't create group\n"
msgstr "%s: Gruppe kann nicht erzeugt werden\n"
#, fuzzy, c-format
#| msgid "%s: can't create user\n"
msgid "%s: can't create subordinate user IDs\n"
msgstr "%s: Benutzer kann nicht erstellt werden\n"
#, fuzzy, c-format
#| msgid "%s: can't create group\n"
msgid "%s: can't create subordinate group IDs\n"
msgstr "%s: Gruppe kann nicht erzeugt werden\n"
@@ -2339,7 +2321,6 @@ msgstr ""
"nicht entfernt.\n"
#, fuzzy, c-format
#| msgid "%s: cannot remove entry '%s' from %s\n"
msgid "%s: cannot remove entry %lu from %s\n"
msgstr "%s: Eintrag »%s« konnte nicht aus %s entfernt werden.\n"
@@ -2427,7 +2408,7 @@ msgstr " -G, --groups GRUPPEN Neue Liste zusätzlicher GRUPPEN\n"
msgid ""
" -a, --append append the user to the supplemental GROUPS\n"
" mentioned by the -G option without removing\n"
" him/her from other groups\n"
" the user from other groups\n"
msgstr ""
" -a, --append Benutzer zu zusätzlichen Gruppen "
"hinzufügen,\n"
@@ -2502,12 +2483,10 @@ msgid "%s: user '%s' already exists in %s\n"
msgstr "%s: Benutzer »%s« existiert bereits in %s.\n"
#, fuzzy, c-format
#| msgid "%s: invalid date '%s'\n"
msgid "%s: invalid subordinate uid range '%s'\n"
msgstr "%s: Ungültiges Datum »%s«\n"
#, fuzzy, c-format
#| msgid "%s: invalid date '%s'\n"
msgid "%s: invalid subordinate gid range '%s'\n"
msgstr "%s: Ungültiges Datum »%s«\n"
@@ -2528,7 +2507,6 @@ msgid "%s: UID '%lu' already exists\n"
msgstr "%s: UID »%lu« existiert bereits\n"
#, fuzzy, c-format
#| msgid "%s: %s is not authorized to change the password of %s\n"
msgid "%s: %s does not exist, you cannot use the flags %s or %s\n"
msgstr "%s: %s ist nicht berechtigt, das Passwort von %s zu ändern.\n"
@@ -2580,22 +2558,18 @@ msgid "failed to rename mailbox"
msgstr "Fehler beim Umbenennen von mailbox"
#, fuzzy, c-format
#| msgid "%s: failed to prepare the new %s entry '%s'\n"
msgid "%s: failed to remove uid range %lu-%lu from '%s'\n"
msgstr "%s: Vorbereiten des neuen %s-Eintrags »%s« fehlgeschlagen.\n"
#, fuzzy, c-format
#| msgid "%s: failed to prepare the new %s entry '%s'\n"
msgid "%s: failed to add uid range %lu-%lu from '%s'\n"
msgstr "%s: Vorbereiten des neuen %s-Eintrags »%s« fehlgeschlagen.\n"
#, fuzzy, c-format
#| msgid "%s: failed to prepare the new %s entry '%s'\n"
msgid "%s: failed to remove gid range %lu-%lu from '%s'\n"
msgstr "%s: Vorbereiten des neuen %s-Eintrags »%s« fehlgeschlagen.\n"
#, fuzzy, c-format
#| msgid "%s: failed to prepare the new %s entry '%s'\n"
msgid "%s: failed to add gid range %lu-%lu from '%s'\n"
msgstr "%s: Vorbereiten des neuen %s-Eintrags »%s« fehlgeschlagen.\n"
@@ -2654,14 +2628,12 @@ msgid "Couldn't make backup"
msgstr "Sicherung konnte nicht erstellt werden"
#, fuzzy, c-format
#| msgid "%s: PAM: %s\n"
msgid "%s: %s: %s\n"
msgstr "%s: PAM: %s\n"
#, fuzzy, c-format
#| msgid "%s: nscd exited with status %d"
msgid "%s: %s returned with status %d\n"
msgstr "%s: nscd wurde mit Status %d beendet"
msgstr "%s: nscd wurde mit Status %d beendet\n"
#, c-format
msgid "%s: %s killed by signal %d\n"
@@ -2680,7 +2652,7 @@ msgid "failed to allocate memory"
msgstr "Speicherreservierung fehlgeschlagen"
msgid "failed to create backup file"
msgstr "Erzeugen der Backup-Datei fehlgeschlagen"
msgstr "Erzeugen der Sicherungsdatei fehlgeschlagen"
#, c-format
msgid "%s: can't restore %s: %s (your changes are in %s)\n"
@@ -2691,647 +2663,3 @@ msgstr ""
#, c-format
msgid "%s: failed to find tcb directory for %s\n"
msgstr "%s: tcb-Verzeichnis für %s konnte nicht gefunden werden\n"
#~ msgid " -c, --crypt-method the crypt method (one of %s)\n"
#~ msgstr ""
#~ " -c, --crypt-method Die Verschlüsselungsmethode (eine der\n"
#~ " folgenden: %s)\n"
#~ msgid ""
#~ "Usage: vipw [options]\n"
#~ "\n"
#~ "Options:\n"
#~ msgstr ""
#~ "Aufruf: vipw [Optionen]\n"
#~ "\n"
#~ "Optionen:\n"
#~ msgid "malloc(%d) failed\n"
#~ msgstr "malloc(%d) fehlgeschlagen\n"
#~ msgid ""
#~ "Usage: chage [options] [LOGIN]\n"
#~ "\n"
#~ "Options:\n"
#~ " -d, --lastday LAST_DAY set date of last password change to "
#~ "LAST_DAY\n"
#~ " -E, --expiredate EXPIRE_DATE set account expiration date to "
#~ "EXPIRE_DATE\n"
#~ " -h, --help display this help message and exit\n"
#~ " -I, --inactive INACTIVE set password inactive after expiration\n"
#~ " to INACTIVE\n"
#~ " -l, --list show account aging information\n"
#~ " -m, --mindays MIN_DAYS set minimum number of days before "
#~ "password\n"
#~ " change to MIN_DAYS\n"
#~ " -M, --maxdays MAX_DAYS set maximim number of days before "
#~ "password\n"
#~ " change to MAX_DAYS\n"
#~ " -W, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
#~ "\n"
#~ msgstr ""
#~ "Aufruf: chage [Optionen] [BENUTZERZUGANG]\n"
#~ "\n"
#~ "Optionen:\n"
#~ " -d, --lastday LETZTER_TAG Tag der letzten Passwortänderung auf\n"
#~ " LETZTER_TAG setzen\n"
#~ " -E, --expiredate ABL_DATUM Ablaufdatum des Benutzerzugangs auf\n"
#~ " ABL_DATUM setzen\n"
#~ " -h, --help Diese Hilfe anzeigen, sonst nichts\n"
#~ " -I, --inactive INAKTIV Passwort nach Ablauf von INAKTIV\n"
#~ " deaktivieren\n"
#~ " -l, --list Informationen zu Ablaufdaten usw. "
#~ "anzeigen\n"
#~ " -m, --mindays MIN_TAGE Minimale Anzahl der Tage vor\n"
#~ " Passwortänderung auf MIN_TAGE setzen\n"
#~ " -M, --maxdays MAX_TAGE Maximale Anzahl der Tage vor\n"
#~ " Passwortänderung auf MAX_TAGE setzen\n"
#~ " -W, --warndays WARN_TAGE Anzahl der Tage für Ablaufwarnung auf\n"
#~ " WARN_TAGE setzen\n"
#~ "\n"
#~ msgid "%s: PAM authentication failed\n"
#~ msgstr "%s: PAM-Authentifizierung fehlgeschlagen\n"
#~ msgid ""
#~ "Usage: %s [-f full_name] [-r room_no] [-w work_ph]\n"
#~ "\t[-h home_ph] [-o other] [user]\n"
#~ msgstr ""
#~ "Aufruf: %s [-f vollst_Name] [-r Zimmernummer] [-w Tel_gesch]\n"
#~ "\t[-h Tel_privat] [-o sonstiges] [Benutzer]\n"
#~ msgid "Usage: %s [-f full_name] [-r room_no] [-w work_ph] [-h home_ph]\n"
#~ msgstr ""
#~ "Aufruf: %s [-f vollst_Name] [-r Zimmernummer] [-w Tel_gesch] [-h "
#~ "Tel_privat]\n"
#~ msgid ""
#~ "Usage: %s [options]\n"
#~ "\n"
#~ "Options:\n"
#~ " -c, --crypt-method the crypt method (one of %s)\n"
#~ " -e, --encrypted supplied passwords are encrypted\n"
#~ " -h, --help display this help message and exit\n"
#~ " -m, --md5 encrypt the clear text password using\n"
#~ " the MD5 algorithm\n"
#~ "%s\n"
#~ msgstr ""
#~ "Aufruf: %s [Optionen]\n"
#~ "\n"
#~ "Optionen:\n"
#~ " -c, --crypt-method Verschlüsselungsmethode (eine der\n"
#~ " folgenden: %s)\n"
#~ " -e, --encrypted Angegebene Passwörter sind verschlüsselt\n"
#~ " -h, --help Diese Hilfe anzeigen, sonst nichts\n"
#~ " -m, --md5 Die Klartext-Passwörter mittels MD5-\n"
#~ " Algorithmus verschlüsseln\n"
#~ "%s\n"
#~ msgid ""
#~ "Usage: chsh [options] [LOGIN]\n"
#~ "\n"
#~ "Options:\n"
#~ " -h, --help display this help message and exit\n"
#~ " -s, --shell SHELL new login shell for the user account\n"
#~ "\n"
#~ msgstr ""
#~ "Aufruf: chsh [Optionen] [BENUTZERZUGANG]\n"
#~ "\n"
#~ "Optionen:\n"
#~ " -h, --help Diese Hilfe anzeigen, sonst nichts\n"
#~ " -s, --shell SHELL Neue Login-Shell für den Benutzerzugang\n"
#~ "\n"
#~ msgid "Usage: expiry {-f|-c}\n"
#~ msgstr "Aufruf: expiry {-f|-c}\n"
#~ msgid "faillog: Failed to get the entry for UID %lu\n"
#~ msgstr "faillog: Auslesen des Eintrags für UID %lu fehlgeschlagen\n"
#~ msgid "faillog: Cannot open %s: %s\n"
#~ msgstr "faillog: %s kann nicht geöffnet werden: %s\n"
#~ msgid "faillog: Cannot get the size of %s: %s\n"
#~ msgstr "faillog: Auslesen der Größe von %s fehlgeschlagen: %s\n"
#~ msgid "Usage: groupdel group\n"
#~ msgstr "Aufruf: groupdel Gruppe\n"
#~ msgid "Usage: %s [-r] [-s] [group [gshadow]]\n"
#~ msgstr "Aufruf: %s [-r] [-s] [Gruppe [gshadow]]\n"
#~ msgid "Usage: %s [-r] [-s] [group]\n"
#~ msgstr "Aufruf: %s [-r] [-s] [Gruppe]\n"
#~ msgid "%s: -s and -r are incompatibile\n"
#~ msgstr "%s: -s und -r sind nicht kompatibel.\n"
#~ msgid "Usage: grpconv\n"
#~ msgstr "Aufruf: grpconv\n"
#~ msgid "Usage: grpunconv\n"
#~ msgstr "Aufruf: grpunconv\n"
#~ msgid ""
#~ "Usage: lastlog [options]\n"
#~ "\n"
#~ "Options:\n"
#~ " -b, --before DAYS print only lastlog records older than "
#~ "DAYS\n"
#~ " -h, --help display this help message and exit\n"
#~ " -t, --time DAYS print only lastlog records more recent "
#~ "than DAYS\n"
#~ " -u, --user LOGIN print lastlog record of the specified "
#~ "LOGIN\n"
#~ "\n"
#~ msgstr ""
#~ "Aufruf: lastlog [Optionen]\n"
#~ "\n"
#~ "Optionen:\n"
#~ " -b, --before TAGE Nur lastlog-Aufzeichnungen zeigen, die "
#~ "älter\n"
#~ " als TAGE sind\n"
#~ " -h, --help Diese Hilfe anzeigen, sonst nichts\n"
#~ " -t, --time TAGE Nur lastlog-Aufzeichnungen zeigen, die "
#~ "jünger\n"
#~ " als TAGE sind\n"
#~ " -u, --user BENUTZERZUGANG lastlog-Eintrag für BENUTZERZUGANG "
#~ "anzeigen\n"
#~ "\n"
#~ msgid ""
#~ "Usage: passwd [options] [LOGIN]\n"
#~ "\n"
#~ "Options:\n"
#~ " -a, --all report password status on all accounts\n"
#~ " -d, --delete delete the password for the named "
#~ "account\n"
#~ " -e, --expire force expire the password for the named "
#~ "account\n"
#~ " -h, --help display this help message and exit\n"
#~ " -k, --keep-tokens change password only if expired\n"
#~ " -i, --inactive INACTIVE set password inactive after expiration\n"
#~ " to INACTIVE\n"
#~ " -l, --lock lock the password of the named account\n"
#~ " -n, --mindays MIN_DAYS set minimum number of days before "
#~ "password\n"
#~ " change to MIN_DAYS\n"
#~ " -q, --quiet quiet mode\n"
#~ " -r, --repository REPOSITORY change password in REPOSITORY repository\n"
#~ " -S, --status report password status on the named "
#~ "account\n"
#~ " -u, --unlock unlock the password of the named account\n"
#~ " -w, --warndays WARN_DAYS set expiration warning days to WARN_DAYS\n"
#~ " -x, --maxdays MAX_DAYS set maximum number of days before "
#~ "password\n"
#~ " change to MAX_DAYS\n"
#~ "\n"
#~ msgstr ""
#~ "Aufruf: passwd [Optionen] [BENUTZERZUGANG]\n"
#~ "\n"
#~ "Optionen:\n"
#~ " -a, --all Passwort-Status für alle Benutzerzugänge\n"
#~ " anzeigen\n"
#~ " -d, --delete Passwort für den Benutzerzugang löschen\n"
#~ " -e, --expire Ablauf des Passworts für den "
#~ "Benutzerzugang\n"
#~ " erzwingen\n"
#~ " -h, --help Diese Hilfe anzeigen, sonst nichts\n"
#~ " -k, --keep-tokens Passwort nur ändern falls abgelaufen\n"
#~ " -i, --inactive INAKTIV Passwort nach Ablauf von INAKTIV\n"
#~ " deaktivieren\n"
#~ " -l, --lock Benutzerzugang sperren\n"
#~ " -n, --mindays MIN_TAGE Minimale Anzahl der Tage vor\n"
#~ " Passwortänderung auf MIN_TAGE setzen\n"
#~ " -q, --quiet Nicht so geschwätzig verhalten\n"
#~ " -r, --repository REPOSITORY Passwort ändern in REPOSITORY\n"
#~ " -S, --status Passwort-Status des Benutzerzugangs "
#~ "anzeigen\n"
#~ " -u, --unlock Benutzerzugang entsperren\n"
#~ " -w, --warndays WARN_TAGE Anzahl der Tage für Ablaufwarnung auf\n"
#~ " WARN_TAGE setzen\n"
#~ " -x, --maxdays MAX_TAGE Maximale Anzahl der Tage vor\n"
#~ " Passwortänderung auf MAX_TAGE setzen\n"
#~ "\n"
#~ msgid "Usage: %s [-q] [-r] [passwd]\n"
#~ msgstr "Aufruf: %s [-q] [-r] [passwort [shadow]]\n"
#~ msgid "Usage: %s [-q] [-r] [-s] [passwd [shadow]]\n"
#~ msgstr "Aufruf: %s [-q] [-r] [-s] [passwort [shadow]]\n"
#~ msgid "Usage: pwconv\n"
#~ msgstr "Aufruf: pwconv\n"
#~ msgid "Usage: pwunconv\n"
#~ msgstr "Aufruf: pwunconv\n"
#~ msgid "Unknown id: %s\n"
#~ msgstr "Unbekannte ID: %s\n"
#~ msgid "No shell\n"
#~ msgstr "Keine Shell\n"
#~ msgid ""
#~ "Usage: userdel [options] LOGIN\n"
#~ "\n"
#~ "Options:\n"
#~ " -f, --force force removal of files,\n"
#~ " even if not owned by user\n"
#~ " -h, --help display this help message and exit\n"
#~ " -r, --remove remove home directory and mail spool\n"
#~ "\n"
#~ msgstr ""
#~ "Aufruf: userdel [Optionen] BENUTZERZUGANG\n"
#~ "\n"
#~ "Optionen:\n"
#~ " -f, --force Entfernen von Dateien erzwingen, auch "
#~ "wenn\n"
#~ " sie nicht Eigentum des zu löschenden\n"
#~ " Benutzers sind\n"
#~ " -h, --help Diese Hilfe anzeigen, sonst nichts\n"
#~ " -r, --remove Entferne Home-Verzeichnis und Mail-Spool\n"
#~ "\n"
#~ msgid "%s: user %s is currently logged in\n"
#~ msgstr "%s: Benutzer %s ist derzeit angemeldet.\n"
#~ msgid ""
#~ "Usage: usermod [options] LOGIN\n"
#~ "\n"
#~ "Options:\n"
#~ " -c, --comment COMMENT new value of the GECOS field\n"
#~ " -d, --home HOME_DIR new home directory for the user account\n"
#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
#~ "EXPIRE_DATE\n"
#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
#~ " to INACTIVE\n"
#~ " -g, --gid GROUP force use GROUP as new primary group\n"
#~ " -G, --groups GROUPS new list of supplementary GROUPS\n"
#~ " -a, --append append the user to the supplemental "
#~ "GROUPS\n"
#~ " mentioned by the -G option without "
#~ "removing\n"
#~ " him/her from other groups\n"
#~ " -h, --help display this help message and exit\n"
#~ " -l, --login NEW_LOGIN new value of the login name\n"
#~ " -L, --lock lock the user account\n"
#~ " -m, --move-home move contents of the home directory to "
#~ "the\n"
#~ " new location (use only with -d)\n"
#~ " -o, --non-unique allow using duplicate (non-unique) UID\n"
#~ " -p, --password PASSWORD use encrypted password for the new "
#~ "password\n"
#~ " -s, --shell SHELL new login shell for the user account\n"
#~ " -u, --uid UID new UID for the user account\n"
#~ " -U, --unlock unlock the user account\n"
#~ "%s\n"
#~ msgstr ""
#~ "Aufruf: usermod [Optionen] BENUTZERZUGANG\n"
#~ "\n"
#~ "Optionen:\n"
#~ " -c, --comment KOMMENTAR Neuer KOMMENTAR im GECOS-Feld\n"
#~ " -d, --home HOME_DIR Neues Home-Verzeichnis für den Benutzer-\n"
#~ " zugang\n"
#~ " -e, --expiredate ABL_DATUM Ablaufdatum auf ABL_DATUM setzen\n"
#~ " -f, --inactive INAKTIV Passwort nach Ablauf von INAKTIV\n"
#~ " deaktivieren\n"
#~ " -g, --gid GRUPPE Erzwinge GRUPPE als neue primäre Gruppe\n"
#~ " -G, --groups GRUPPEN Neue Liste zusätzlicher GRUPPEN\n"
#~ " -a, --append Benutzer zu zusätzlichen Gruppen "
#~ "hinzufügen,\n"
#~ " die mit der Option -G angegeben werden, "
#~ "ohne\n"
#~ " ihn dabei aus anderen Gruppen zu "
#~ "entfernen\n"
#~ " -h, --help Diese Hilfe anzeigen, sonst nichts\n"
#~ " -l, --login NEUER_NAME Neuer Wert für den Namen des "
#~ "Benutzerzugangs\n"
#~ " -L, --lock Den Benutzerzugang sperren\n"
#~ " -m, --move-home Den Inhalt des Home-Verzeichnisses an "
#~ "den\n"
#~ " neuen Ort verschieben (nur mit -d "
#~ "benutzen)\n"
#~ " -o, --non-unique Benutzung von doppelter (nicht "
#~ "einmaliger)\n"
#~ " UID erlauben\n"
#~ " -p, --password PASSWORD Ein verschlüsseltes Passwort als neues\n"
#~ " Passwort verwenden\n"
#~ " -s, --shell SHELL Neue Login-Shell des Benutzerzugangs\n"
#~ " -u, --uid UID Neue UID des Benutzerzugangs\n"
#~ " -U, --unlock Den Benutzerzugang entsperren\n"
#~ "%s\n"
#~ msgid "%s: no flags given\n"
#~ msgstr "%s: Keine Optionen angegeben\n"
#, fuzzy
#~| msgid ""
#~| "Usage: vipw [options]\n"
#~| "\n"
#~| "Options:\n"
#~| " -g, --group edit group database\n"
#~| " -h, --help display this help message and exit\n"
#~| " -p, --passwd edit passwd database\n"
#~| " -q, --quiet quiet mode\n"
#~| " -s, --shadow edit shadow or gshadow database\n"
#~| "\n"
#~ msgid ""
#~ "Usage: vipw [options]\n"
#~ "\n"
#~ "Options:\n"
#~ " -g, --group edit group database\n"
#~ " -h, --help display this help message and exit\n"
#~ " -p, --passwd edit passwd database\n"
#~ " -q, --quiet quiet mode\n"
#~ " -s, --shadow edit shadow or gshadow database\n"
#~ " -u, --user which user's tcb shadow file to edit\n"
#~ "\n"
#~ msgstr ""
#~ "Aufruf: vipw [Optionen]\n"
#~ "\n"
#~ "Optionen:\n"
#~ " -g, --group Gruppen-Datenbank editieren\n"
#~ " -h, --help Diese Hilfe anzeigen, sonst nichts\n"
#~ " -p, --passwd passwd-Datenbank editieren\n"
#~ " -q, --quiet Nicht so geschwätzig verhalten\n"
#~ " -s, --shadow shadow- oder gshadow-Datenbank editieren\n"
#~ "\n"
#~ msgid ""
#~ "Usage: %s [option] GROUP\n"
#~ "\n"
#~ "Options:\n"
#~ " -a, --add USER add USER to GROUP\n"
#~ " -d, --delete USER remove USER from GROUP\n"
#~ " -r, --remove-password remove the GROUP's password\n"
#~ " -R, --restrict restrict access to GROUP to its members\n"
#~ " -M, --members USER,... set the list of members of GROUP\n"
#~ "%s\n"
#~ "\n"
#~ msgstr ""
#~ "Aufruf: %s [Option] GRUPPE\n"
#~ "\n"
#~ "Optionen:\n"
#~ " -a, --add NUTZER NUTZER zu GRUPPE hinzufügen\n"
#~ " -d, --delete NUTZER NUTZER aus GRUPPE entfernen\n"
#~ " -r, --remove-password Passwort der GRUPPE entfernen\n"
#~ " -R, --restrict Zugriff zu GRUPPE auf ihre Mitglieder\n"
#~ " beschränken\n"
#~ " -M, --members NUTZER,... Liste der Mitglieder von GRUPPE setzen\n"
#~ "%s\n"
#~ "\n"
#~ msgid ""
#~ "Usage: groupmems [options] [action]\n"
#~ "\n"
#~ "Options:\n"
#~ " -g, --group groupname change groupname instead of the user's "
#~ "group\n"
#~ " (root only)\n"
#~ "\n"
#~ "Actions:\n"
#~ " -a, --add username add username to the members of the group\n"
#~ " -d, --delete username remove username from the members of the "
#~ "group\n"
#~ " -p, --purge purge all members from the group\n"
#~ " -l, --list list the members of the group\n"
#~ "\n"
#~ msgstr ""
#~ "Aufruf: groupmems [Optionen] [Aktion]\n"
#~ "\n"
#~ "Optionen:\n"
#~ " -g, --group Gruppenname Ändere Gruppenname statt der Gruppe des\n"
#~ " Benutzers (nur root)\n"
#~ "\n"
#~ "Aktionen:\n"
#~ " -a, --add Benutzername Benutzername zu den Mitgliedern der "
#~ "Gruppe\n"
#~ " hinzufügen\n"
#~ " -d, --delete Benutzername Benutzername von den Mitgliedern der "
#~ "Gruppe\n"
#~ " entfernen\n"
#~ " -p, --purge Alle Mitglieder aus der Gruppe entfernen\n"
#~ " -l, --list Die Mitglieder der Gruppe auflisten\n"
#~ "\n"
#~ msgid "%s: can't create %s\n"
#~ msgstr "%s: %s kann nicht erstellt werden\n"
#~ msgid "%s: can't chown %s\n"
#~ msgstr "%s: Besitzer von %s kann nicht geändert werden\n"
#~ msgid ""
#~ "Usage: faillog [options]\n"
#~ "\n"
#~ "Options:\n"
#~ " -a, --all display faillog records for all users\n"
#~ " -h, --help display this help message and exit\n"
#~ " -l, --lock-time SEC after failed login lock account to SEC "
#~ "seconds\n"
#~ " -m, --maximum MAX set maximum failed login counters to MAX\n"
#~ " -r, --reset reset the counters of login failures\n"
#~ " -t, --time DAYS display faillog records more recent than "
#~ "DAYS\n"
#~ " -u, --user LOGIN display faillog record or maintains "
#~ "failure\n"
#~ " counters and limits (if used with -r, -m "
#~ "or -l\n"
#~ " options) only for user with LOGIN\n"
#~ "\n"
#~ msgstr ""
#~ "Aufruf: faillog [Optionen]\n"
#~ "\n"
#~ "Optionen:\n"
#~ " -a, --all Aufzeichnungen fehlgeschlagener "
#~ "Anmeldungen\n"
#~ " für alle Benutzer anzeigen\n"
#~ " -h, --help Diese Hilfe anzeigen, sonst nichts\n"
#~ " -l, --lock-time SEK Den Benutzerzugang nach fehlgeschlagener\n"
#~ " Anmeldung für SEK Sekunden sperren\n"
#~ " -m, --maximum MAX Maximal mögliche Anzahl fehlgeschlagener\n"
#~ " Anmeldungen auf MAX setzen\n"
#~ " -r, --reset Zähler fehlgeschlagener Anmeldungen\n"
#~ " zurücksetzen\n"
#~ " -t, --time TAGE Aufzeichnungen fehlgeschlagener "
#~ "Anmeldungen\n"
#~ " anzeigen, die jünger sind als TAGE Tage\n"
#~ " -u, --user BENUTZERZUGANG Aufzeichnungen fehlgeschlagener "
#~ "Anmeldungen\n"
#~ " anzeigen bzw. Verwalten von Zählern und "
#~ "Be-\n"
#~ " schränkungen (falls mit Optionen -r, -m "
#~ "oder -l\n"
#~ " aufgerufen) für den BENUTZERZUGANG\n"
#~ "\n"
#~ msgid ""
#~ "Usage: groupadd [options] GROUP\n"
#~ "\n"
#~ "Options:\n"
#~ " -f, --force force exit with success status if the\n"
#~ " specified group already exists\n"
#~ " -g, --gid GID use GID for the new group\n"
#~ " -h, --help display this help message and exit\n"
#~ " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
#~ " -o, --non-unique allow create group with duplicate\n"
#~ " (non-unique) GID\n"
#~ " -p, --password PASSWORD use encrypted password for the new group\n"
#~ " -r, --system create a system account\n"
#~ "\n"
#~ msgstr ""
#~ "Aufruf: groupadd [Optionen] GRUPPE\n"
#~ "\n"
#~ "Optionen:\n"
#~ " -f, --force Ohne Fehler beenden, falls die GRUPPE\n"
#~ " bereits existiert\n"
#~ " -g, --gid GID Benutze GID für die neue GRUPPE\n"
#~ " -h, --help Diese Hilfe anzeigen, sonst nichts\n"
#~ " -K, --key SCHLÜSSEL=WERT Die Vorgabewerte in /etc/login.defs\n"
#~ " überschreiben\n"
#~ " -o, --non-unique Das Erstellen einer GRUPPE mit einer "
#~ "nicht\n"
#~ " einmaligen (doppelten) GID erlauben\n"
#~ " -p, --password PASSWORT Verwende verschlüsseltes Passwort für "
#~ "die\n"
#~ " neue GRUPPE\n"
#~ " -r, --system Erstelle eine Systemgruppe\n"
#~ "\n"
#~ msgid ""
#~ "Usage: groupmod [options] GROUP\n"
#~ "\n"
#~ "Options:\n"
#~ " -g, --gid GID force use new GID by GROUP\n"
#~ " -h, --help display this help message and exit\n"
#~ " -n, --new-name NEW_GROUP force use NEW_GROUP name by GROUP\n"
#~ " -o, --non-unique allow using duplicate (non-unique) GID by "
#~ "GROUP\n"
#~ " -p, --password PASSWORD use encrypted password for the new "
#~ "password\n"
#~ "\n"
#~ msgstr ""
#~ "Aufruf: groupmod [Optionen] GRUPPE\n"
#~ "\n"
#~ "Optionen:\n"
#~ " -g, --gid GID Neue GID für die GRUPPE erzwingen\n"
#~ " -h, --help Diese Hilfe anzeigen, sonst nichts\n"
#~ " -n, --new-name NEUE_GRUPPE Neuen Namen NEUE_GRUPPE für die GRUPPE "
#~ "erzwingen\n"
#~ " -o, --non-unique Verwendung einer doppelten (nicht "
#~ "einmaligen)\n"
#~ " GID für die GRUPPE erlauben\n"
#~ " -p, --password PASSWORT Verwende verschlüsseltes Passwort als \n"
#~ " neues Passwort\n"
#~ "\n"
#~ msgid ""
#~ "Usage: useradd [options] LOGIN\n"
#~ "\n"
#~ "Options:\n"
#~ " -b, --base-dir BASE_DIR base directory for the new user account\n"
#~ " home directory\n"
#~ " -c, --comment COMMENT set the GECOS field for the new user "
#~ "account\n"
#~ " -d, --home-dir HOME_DIR home directory for the new user account\n"
#~ " -D, --defaults print or save modified default useradd\n"
#~ " configuration\n"
#~ " -e, --expiredate EXPIRE_DATE set account expiration date to "
#~ "EXPIRE_DATE\n"
#~ " -f, --inactive INACTIVE set password inactive after expiration\n"
#~ " to INACTIVE\n"
#~ " -g, --gid GROUP force use GROUP for the new user account\n"
#~ " -G, --groups GROUPS list of supplementary groups for the new\n"
#~ " user account\n"
#~ " -h, --help display this help message and exit\n"
#~ " -k, --skel SKEL_DIR specify an alternative skel directory\n"
#~ " -K, --key KEY=VALUE overrides /etc/login.defs defaults\n"
#~ " -l, --no-log-init do not add the user to the lastlog and\n"
#~ " faillog databases\n"
#~ " -m, --create-home create home directory for the new user\n"
#~ " account\n"
#~ " -M, --no-create-home do not create user's home directory\n"
#~ " (overrides /etc/login.defs)\n"
#~ " -N, --no-user-group do not create a group with the same name "
#~ "as\n"
#~ " the user\n"
#~ " -o, --non-unique allow create user with duplicate\n"
#~ " (non-unique) UID\n"
#~ " -p, --password PASSWORD use encrypted password for the new user\n"
#~ " account\n"
#~ " -r, --system create a system account\n"
#~ " -s, --shell SHELL the login shell for the new user account\n"
#~ " -u, --uid UID force use the UID for the new user "
#~ "account\n"
#~ " -U, --user-group create a group with the same name as the "
#~ "user\n"
#~ "%s\n"
#~ msgstr ""
#~ "Aufruf: useradd [Optionen] BENUTZERZUGANG\n"
#~ "\n"
#~ "Optionen:\n"
#~ " -b, --base-dir BASIS_VERZ Basisverzeichnis für das\n"
#~ " Home-Verzeichnis des neuen Benutzers\n"
#~ " -c, --comment KOMMENTAR Kommentar für das GECOS-Feld des neuen\n"
#~ " Benutzers\n"
#~ " -d, --home-dir HOME_VERZ Home-Verzeichnis des neuen Benutzers\n"
#~ " -D, --defaults Anzeigen oder Speichern der "
#~ "modifizierten\n"
#~ " Standardkonfiguration für useradd\n"
#~ " -e, --expiredate ABL_DATUM Das Ablaufdatum des Benutzerzugangs auf\n"
#~ " ABL_DATUM setzen\n"
#~ " -f, --inactive INAKTIV Passwort nach Ablauf von INAKTIV "
#~ "deaktivieren\n"
#~ " -g, --gid GRUPPE Gruppenname GRUPPE für neuen Benutzer "
#~ "erzwingen\n"
#~ " -G, --groups GRUPPEN Liste der zusätzlichen Gruppen für den\n"
#~ " neuen Benutzer\n"
#~ " -h, --help Diese Hilfe anzeigen, sonst nichts\n"
#~ " -k, --skel SKEL_VERZ Ein alternatives skel-Verzeichnis\n"
#~ " (Vorlagenverzeichnis) angeben\n"
#~ " -K, --key SCHLÜSSEL=WERT Die Vorgaben in /etc/login.defs "
#~ "überschreiben\n"
#~ " -l, --no-log-init Den Benutzer nicht zu den lastlog- und "
#~ "faillog-\n"
#~ " Datenbanken hinzufügen\n"
#~ " -m, --create-home Home-Verzeichnis des neuen Benutzers "
#~ "erstellen\n"
#~ " -M, --no-create-home Kein Home-Verzeichnis für den Benutzer "
#~ "erstellen\n"
#~ " (überschreibt /etc/login.defs)\n"
#~ " -N, --no-user-group Keine Gruppe mit dem gleichen Namen wie "
#~ "dem des\n"
#~ " Benutzers erstellen\n"
#~ " -o, --non-unique Benutzer mit doppelter (nicht "
#~ "einmaliger)\n"
#~ " UID erlauben\n"
#~ " -p, --password PASSWORT Benutze ein verschlüsseltes Passwort für\n"
#~ " den neuen Benutzerzugang\n"
#~ " -r, --system Erstelle einen Systemzugang\n"
#~ " -s, --shell SHELL Die Login-Shell des neuen "
#~ "Benutzerzugangs\n"
#~ " -u, --uid UID Benutzung dieser UID erzwingen\n"
#~ " -U, --user-group Erstelle eine Gruppe mit dem gleichen "
#~ "Namen wie\n"
#~ " dem des Benutzers\n"
#~ "%s\n"
#~ msgid ""
#~ "Usage: %s [options] [input]\n"
#~ "\n"
#~ " -c, --crypt-method the crypt method (one of %s)\n"
#~ " -r, --system create system accounts\n"
#~ "%s\n"
#~ msgstr ""
#~ "Aufruf: %s [Optionen] [Eingabe]\n"
#~ "\n"
#~ " -c, --crypt-method Die Verschlüsselungsmethode (eine der\n"
#~ " folgenden: %s)\n"
#~ " -r, --system Erzeuge Systemzugänge\n"
#~ "%s\n"
#~ msgid "Password set to expire."
#~ msgstr "Passwort wird ablaufen."
#~ msgid "setfscreatecon() failed"
#~ msgstr "setfscreatecon() fehlgeschlagen"

154
po/dz.po
View File

@@ -88,7 +88,6 @@ msgid "Could not set serange for %s\n"
msgstr ""
#, fuzzy, c-format
#| msgid "Could not allocate space for config info.\n"
msgid "Could not set sename for %s\n"
msgstr "རིམ་སྒྲིག་བརྡ་དོན་གྱི་དོན་ལུ་ བར་སྟོང་སྤྲོད་མ་ཚུགས།\n"
@@ -97,7 +96,6 @@ msgid "Could not modify login mapping for %s\n"
msgstr ""
#, fuzzy, c-format
#| msgid "Changing the aging information for %s\n"
msgid "Cannot create SELinux login mapping for %s\n"
msgstr "%s གི་དོན་ལུ་ རྒས་པའི་བརྡ་དོན་བསྒྱུར་བཅོས་འབད་དོ།\n"
@@ -118,12 +116,10 @@ msgid "Cannot init SELinux management\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: Cannot determine your user name.\n"
msgid "Cannot create SELinux user key\n"
msgstr "%s: ཁྱོད་ཀྱི་ལག་ལེན་པའི་མིང་ གཏན་འབེབས་བཟོ་མི་ཚུགས།\n"
#, fuzzy, c-format
#| msgid "%s: line %d: cannot find user %s\n"
msgid "Cannot verify the SELinux user\n"
msgstr "%s: གྲལ་ཐིག་ %d:ལག་ལེན་པ་ %sའཚོལ་མི་ཚུགས།\n"
@@ -156,17 +152,14 @@ msgid "%s: out of memory\n"
msgstr "%s: དྲན་ཚད་ལས་བརྒལ་བ།\n"
#, fuzzy, c-format
#| msgid "%s: cannot update file %s\n"
msgid "%s: Cannot stat %s: %s\n"
msgstr "%s: ཡིག་སྣོད་ %sའདི་ དུས་མཐུན་བཟོ་མི་ཚུགས།\n"
#, fuzzy, c-format
#| msgid "%s: invalid home directory '%s'\n"
msgid "%s: %s is neither a directory, nor a symlink.\n"
msgstr "%s: ནུས་མེད་ཁྱིམ་གྱི་སྣོད་ཐོ་ '%s'།\n"
#, fuzzy, c-format
#| msgid "%s: cannot rename directory %s to %s\n"
msgid "%s: Cannot read symbolic link %s: %s\n"
msgstr "%s: སྣོད་ཐོ་ %s འདི་ %s ལུ་ བསྐྱར་མིང་བཏགས་མི་ཚུགས།\n"
@@ -175,57 +168,46 @@ msgid "%s: Suspiciously long symlink: %s\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: cannot create directory %s\n"
msgid "%s: Cannot create directory %s: %s\n"
msgstr "%s: སྣོད་ཐོ་ %s གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
#, fuzzy, c-format
#| msgid "%s: warning: can't remove "
msgid "%s: Cannot change owner of %s: %s\n"
msgstr "%s: ཉེན་བརྡ་:རྩ་བསྐྲད་གཏང་མི་ཚུགས།"
#, fuzzy, c-format
#| msgid "%s: warning: can't remove "
msgid "%s: Cannot change mode of %s: %s\n"
msgstr "%s: ཉེན་བརྡ་:རྩ་བསྐྲད་གཏང་མི་ཚུགས།"
#, fuzzy, c-format
#| msgid "%s: rename: %s"
msgid "%s: unlink: %s: %s\n"
msgstr "%s: བསྐྱར་མིང་བཏགས་:%s"
#, fuzzy, c-format
#| msgid "%s: cannot rename directory %s to %s\n"
msgid "%s: Cannot remove directory %s: %s\n"
msgstr "%s: སྣོད་ཐོ་ %s འདི་ %s ལུ་ བསྐྱར་མིང་བཏགས་མི་ཚུགས།\n"
#, fuzzy, c-format
#| msgid "%s: cannot rename directory %s to %s\n"
msgid "%s: Cannot rename %s to %s: %s\n"
msgstr "%s: སྣོད་ཐོ་ %s འདི་ %s ལུ་ བསྐྱར་མིང་བཏགས་མི་ཚུགས།\n"
#, fuzzy, c-format
#| msgid "%s: warning: can't remove "
msgid "%s: Cannot remove %s: %s\n"
msgstr "%s: ཉེན་བརྡ་:རྩ་བསྐྲད་གཏང་མི་ཚུགས།"
#, fuzzy, c-format
#| msgid "%s: cannot create directory %s\n"
msgid "%s: Cannot create symbolic link %s: %s\n"
msgstr "%s: སྣོད་ཐོ་ %s གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
#, fuzzy, c-format
#| msgid "%s: warning: can't remove "
msgid "%s: Cannot change owners of %s: %s\n"
msgstr "%s: ཉེན་བརྡ་:རྩ་བསྐྲད་གཏང་མི་ཚུགས།"
#, fuzzy, c-format
#| msgid "%s: cannot update file %s\n"
msgid "%s: Cannot lstat %s: %s\n"
msgstr "%s: ཡིག་སྣོད་ %sའདི་ དུས་མཐུན་བཟོ་མི་ཚུགས།\n"
#, fuzzy, c-format
#| msgid "%s: can't update shadow file\n"
msgid "%s: Warning, user %s has no tcb shadow file.\n"
msgstr "%s: གྱིབ་མའི་ཡིག་སྣོད་ དུས་མཐུན་བཟོ་མི་ཚུགས།\n"
@@ -236,12 +218,10 @@ msgid ""
msgstr ""
#, fuzzy, c-format
#| msgid "%s: rename: %s"
msgid "%s: mkdir: %s: %s\n"
msgstr "%s: བསྐྱར་མིང་བཏགས་:%s"
#, fuzzy, c-format
#| msgid "%s: cannot open file %s\n"
msgid "%s: Cannot open %s: %s\n"
msgstr "%s: ཡིག་སྣོད་%s ཁ་ཕྱེ་མི་ཚུགས།\n"
@@ -284,17 +264,14 @@ msgid "Cannot open audit interface - aborting.\n"
msgstr ""
#, fuzzy, c-format
#| msgid "Unable to change tty %s"
msgid "Unable to change owner or mode of tty stdin: %s"
msgstr "ཊི་ཊི་ཝའི་ %s བསྒྱུར་བཅོས་འབད་མ་ཚུགས།"
#, fuzzy, c-format
#| msgid "%s: fields too long\n"
msgid "%s: failed to unlock %s\n"
msgstr "%s: ས་སྒོ་ཚུ་རིང་དྲགས་པས།\n"
#, fuzzy, c-format
#| msgid "%s: %s\n"
msgid "%s: "
msgstr "%s: %s\n"
@@ -335,7 +312,6 @@ msgid ""
msgstr ""
#, fuzzy, c-format
#| msgid "failed to change mailbox owner"
msgid "%s: failed to allocate memory: %s\n"
msgstr "ཡིག་སྒྲོམ་བདག་པོ་སོར་ནི་ལུ་ འཐུས་ཤོར་བྱུང་ཡོདཔ།"
@@ -411,7 +387,6 @@ msgid "passwd: %s\n"
msgstr "ཆོག་ཡིག་: %s\n"
#, fuzzy
#| msgid "Password changed."
msgid "passwd: password unchanged\n"
msgstr "ཆོག་ཡིག་སོར་ཡོདཔ།"
@@ -435,22 +410,18 @@ msgid "%s: failed to drop privileges (%s)\n"
msgstr "%s: ཁེ་དབང་(%s)ཚུ་བཀོག་ནིའི་འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
#, fuzzy, c-format
#| msgid "%s: invalid home phone: '%s'\n"
msgid "%s: invalid chroot path '%s'\n"
msgstr "%s: ནུས་མེད་ཀྱི་ ཁྱིམ་གྱི་བརྒྱུད་འཕྲིན་: '%s'\n"
#, fuzzy, c-format
#| msgid "%s: cannot create directory %s\n"
msgid "%s: cannot access chroot directory %s: %s\n"
msgstr "%s: སྣོད་ཐོ་ %s གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
#, fuzzy, c-format
#| msgid "%s: cannot create directory %s\n"
msgid "%s: cannot chdir to chroot directory %s: %s\n"
msgstr "%s: སྣོད་ཐོ་ %s གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
#, fuzzy, c-format
#| msgid "%s: cannot create directory %s\n"
msgid "%s: unable to chroot to directory %s: %s\n"
msgstr "%s: སྣོད་ཐོ་ %s གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
@@ -483,12 +454,10 @@ msgid "Unable to determine your tty name."
msgstr "ཁྱོད་ཀྱི་ཊི་ཊི་ཝའི་མིང་ གཏན་འབེབས་བཟོ་མ་ཚུགས།"
#, fuzzy
#| msgid "No\n"
msgid "No"
msgstr "མེན།\n"
#, fuzzy, c-format
#| msgid "Usage: %s [input]\n"
msgid ""
"Usage: %s [options] LOGIN\n"
"\n"
@@ -521,7 +490,7 @@ msgid ""
msgstr ""
msgid ""
" -M, --maxdays MAX_DAYS set maximim number of days before password\n"
" -M, --maxdays MAX_DAYS set maximum number of days before password\n"
" change to MAX_DAYS\n"
msgstr ""
@@ -604,17 +573,14 @@ msgid "%s: Cannot determine your user name.\n"
msgstr "%s: ཁྱོད་ཀྱི་ལག་ལེན་པའི་མིང་ གཏན་འབེབས་བཟོ་མི་ཚུགས།\n"
#, fuzzy, c-format
#| msgid "%s: %s\n"
msgid "%s: PAM: %s\n"
msgstr "%s: %s\n"
#, fuzzy, c-format
#| msgid "%s: can't lock files, try again later\n"
msgid "%s: cannot lock %s; try again later.\n"
msgstr "%s:ཡིག་སྣོད་ཚུ་ལྡེ་མིག་བརྐྱབ་མི་ཚུགས་ དོ་རུང་ཤུལ་ལས་འབད་རྩོལ་བསྐྱེད།\n"
#, fuzzy, c-format
#| msgid "%s: cannot open file %s\n"
msgid "%s: cannot open %s\n"
msgstr "%s: ཡིག་སྣོད་%s ཁ་ཕྱེ་མི་ཚུགས།\n"
@@ -623,7 +589,6 @@ msgid "%s: failure while writing changes to %s\n"
msgstr "%s: ཁ་སྤེལ་བ་འཐུས་ཤོར་:%s"
#, fuzzy, c-format
#| msgid "%s: failed to drop privileges (%s)\n"
msgid "%s: failed to prepare the new %s entry '%s'\n"
msgstr "%s: ཁེ་དབང་(%s)ཚུ་བཀོག་ནིའི་འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
@@ -644,7 +609,6 @@ msgid "%s: error changing fields\n"
msgstr "%s: ས་སྒོ་ཚུ་བསྒྱུར་བཅོས་འབད་བའི་བསྒང་ལུ་ འཛོལ་བ།\n"
#, fuzzy, c-format
#| msgid "Usage: %s [input]\n"
msgid ""
"Usage: %s [options] [LOGIN]\n"
"\n"
@@ -673,7 +637,6 @@ msgid "Full Name"
msgstr "མིང་ཆ་ཚང་།"
#, fuzzy, c-format
#| msgid "%s: %s\n"
msgid "\t%s: %s\n"
msgstr "%s: %s\n"
@@ -717,7 +680,6 @@ msgid "%s: invalid home phone: '%s'\n"
msgstr "%s: ནུས་མེད་ཀྱི་ ཁྱིམ་གྱི་བརྒྱུད་འཕྲིན་: '%s'\n"
#, fuzzy, c-format
#| msgid "%s: '%s' contains illegal characters\n"
msgid "%s: '%s' contains non-ASCII characters\n"
msgstr "%s: '%s' ནང་ལུ་ ཁྲིམས་འགལ་ཡིག་ཆ་ཚུ་ཡོད།\n"
@@ -746,7 +708,6 @@ msgid "%s: fields too long\n"
msgstr "%s: ས་སྒོ་ཚུ་རིང་དྲགས་པས།\n"
#, fuzzy, c-format
#| msgid "Usage: %s [input]\n"
msgid ""
"Usage: %s [options]\n"
"\n"
@@ -791,17 +752,14 @@ msgid "%s: line %d: missing new password\n"
msgstr "%s: གྲལ་ཐིག་ %d: ཆོག་ཡིག་གསརཔ་ བརླག་སྟོར་ཞུགས་པ།\n"
#, fuzzy, c-format
#| msgid "%s: failed to drop privileges (%s)\n"
msgid "%s: failed to crypt password with salt '%s': %s\n"
msgstr "%s: ཁེ་དབང་(%s)ཚུ་བཀོག་ནིའི་འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
#, fuzzy, c-format
#| msgid "%s: group %s does not exist\n"
msgid "%s: line %d: group '%s' does not exist\n"
msgstr "%s: སྡེ་ཚན་ %sམེད།\n"
#, fuzzy, c-format
#| msgid "%s: line %d: can't update entry\n"
msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
msgstr "%s: གྲལ་ཐིག་ %d: ཐོ་བཀོད་དུས་མཐུན་བཟོ་མི་ཚུགས།\n"
@@ -824,7 +782,6 @@ msgid "Login Shell"
msgstr "ནང་བསྐྱོད་ཀྱི་ཤལ།"
#, fuzzy, c-format
#| msgid "You may not change the shell for %s.\n"
msgid "You may not change the shell for '%s'.\n"
msgstr "ཁྱོད་ཀྱིས་ %sགི་དོན་ལུ་ ཤལ་བསྒྱུར་བཅོས་མི་འབདཝ་འོང་།\n"
@@ -837,17 +794,14 @@ msgid "%s: Invalid entry: %s\n"
msgstr "%s: ནུས་མེད་ཀྱི་ཐོ་བཀོད་:%s\n"
#, fuzzy, c-format
#| msgid "%s is an invalid shell.\n"
msgid "%s: %s is an invalid shell\n"
msgstr "%s འདི་ནུས་མེད་ཀྱི་ཤལ་ཨིན།\n"
#, fuzzy, c-format
#| msgid "%s: user %s does not exist\n"
msgid "%s: Warning: %s does not exist\n"
msgstr "%s: ལག་ལེན་པ་ %sའདི་ མེད།\n"
#, fuzzy, c-format
#| msgid "%s: warning: %s not owned by %s\n"
msgid "%s: Warning: %s is not executable\n"
msgstr "%s: ཉེན་བརྡ་: %s འདི་ %s གིས་ བདག་དབང་བཟུངམ་མེན།\n"
@@ -865,7 +819,6 @@ msgid "%s: options %s and %s conflict\n"
msgstr ""
#, fuzzy, c-format
#| msgid "lastlog: unexpected argument: %s\n"
msgid "%s: unexpected argument: %s\n"
msgstr "lastlog: རེ་བ་མ་བསྐྱེད་པའི་སྒྲུབ་རྟགས་:%s\n"
@@ -896,7 +849,6 @@ msgid ""
msgstr ""
#, fuzzy, c-format
#| msgid "%s: cannot create directory %s\n"
msgid "%s: Failed to get the entry for UID %lu\n"
msgstr "%s: སྣོད་ཐོ་ %s གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
@@ -904,7 +856,6 @@ msgid "Login Failures Maximum Latest On\n"
msgstr "ནང་བསྐྱོད་ མང་མཐའི་མཇུག་མཐའ་འཐུས་ཤོར་ ཨཱོན། \n"
#, fuzzy, c-format
#| msgid " [%lds left]"
msgid " [%lus left]"
msgstr " [%lds གཡོན་]"
@@ -913,17 +864,14 @@ msgid " [%lds lock]"
msgstr " [%lds ལྡེ་མིག་]"
#, fuzzy, c-format
#| msgid "%s: cannot create directory %s\n"
msgid "%s: Failed to reset fail count for UID %lu\n"
msgstr "%s: སྣོད་ཐོ་ %s གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
#, fuzzy, c-format
#| msgid "%s: failed to drop privileges (%s)\n"
msgid "%s: Failed to set max for UID %lu\n"
msgstr "%s: ཁེ་དབང་(%s)ཚུ་བཀོག་ནིའི་འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
#, fuzzy, c-format
#| msgid "%s: cannot create directory %s\n"
msgid "%s: Failed to set locktime for UID %lu\n"
msgstr "%s: སྣོད་ཐོ་ %s གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
@@ -932,17 +880,14 @@ msgid "%s: Unknown user or range: %s\n"
msgstr "མ་ཤེས་པའི་ལག་ལེན་པ་:%s\n"
#, fuzzy, c-format
#| msgid "%s: cannot rename directory %s to %s\n"
msgid "%s: Cannot get the size of %s: %s\n"
msgstr "%s: སྣོད་ཐོ་ %s འདི་ %s ལུ་ བསྐྱར་མིང་བཏགས་མི་ཚུགས།\n"
#, fuzzy, c-format
#| msgid "%s: failed to drop privileges (%s)\n"
msgid "%s: Failed to write %s: %s\n"
msgstr "%s: ཁེ་དབང་(%s)ཚུ་བཀོག་ནིའི་འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
#, fuzzy, c-format
#| msgid "Usage: %s [input]\n"
msgid ""
"Usage: %s [option] GROUP\n"
"\n"
@@ -974,12 +919,10 @@ msgid ""
msgstr ""
#, fuzzy
#| msgid "The password for %s cannot be changed.\n"
msgid "Except for the -A and -M options, the options cannot be combined.\n"
msgstr "%sགི་དོན་ལུ་ ཆོག་ཡིག་སོར་མི་ཚུགས།\n"
#, fuzzy
#| msgid "The password for %s cannot be changed.\n"
msgid "The options cannot be combined.\n"
msgstr "%sགི་དོན་ལུ་ ཆོག་ཡིག་སོར་མི་ཚུགས།\n"
@@ -988,7 +931,6 @@ msgid "%s: shadow group passwords required for -A\n"
msgstr "%s: -Aགི་དོན་ལུ་ གྱིབ་མའི་སྡེ་ཚན་ཆོག་ཡིག་ཚུ་དགོ\n"
#, fuzzy, c-format
#| msgid "%s: group %s does not exist\n"
msgid "%s: group '%s' does not exist in %s\n"
msgstr "%s: སྡེ་ཚན་ %sམེད།\n"
@@ -1030,7 +972,6 @@ msgid "%s: Not a tty\n"
msgstr "%s: ཊི་ཊི་ཝའི་མེན།\n"
#, fuzzy, c-format
#| msgid "Usage: %s [input]\n"
msgid ""
"Usage: %s [options] GROUP\n"
"\n"
@@ -1063,7 +1004,6 @@ msgid " -r, --system create a system account\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: %s is not a valid group name\n"
msgid "%s: '%s' is not a valid group name\n"
msgstr "%s: %s འདི་ ནུས་ཅན་གྱི་སྡེ་ཚན་མིང་མེན་པས།\n"
@@ -1076,7 +1016,6 @@ msgid "%s: -K requires KEY=VALUE\n"
msgstr "%s: -K གིས་ ལྡེ་མིག་=བེ་ལུ་ དགོཔ་ཨིན།\n"
#, fuzzy, c-format
#| msgid "%s: group %s exists\n"
msgid "%s: group '%s' already exists\n"
msgstr "%s: སྡེ་ཚན་ %sཡོདཔ་ཨིན།\n"
@@ -1085,7 +1024,6 @@ msgid "%s: GID '%lu' already exists\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: Cannot determine your user name.\n"
msgid "%s: Cannot setup cleanup service.\n"
msgstr "%s: ཁྱོད་ཀྱི་ལག་ལེན་པའི་མིང་ གཏན་འབེབས་བཟོ་མི་ཚུགས།\n"
@@ -1095,7 +1033,6 @@ msgid ""
msgstr ""
#, fuzzy, c-format
#| msgid "%s: cannot rename directory %s to %s\n"
msgid "%s: cannot remove entry '%s' from %s\n"
msgstr "%s: སྣོད་ཐོ་ %s འདི་ %s ལུ་ བསྐྱར་མིང་བཏགས་མི་ཚུགས།\n"
@@ -1104,12 +1041,10 @@ msgid "%s: cannot remove the primary group of user '%s'\n"
msgstr "%s: ཨེན་ཨའི་ཨེསི་ ཞབས་ཏོག་སྤྱོད་མི་གུ་ ལག་ལེན་པ་ '%s' བསྒྱུར་བཅོས་འབད་མི་ཚུགས།\n"
#, fuzzy, c-format
#| msgid "%s: group %s does not exist\n"
msgid "%s: group '%s' does not exist\n"
msgstr "%s: སྡེ་ཚན་ %sམེད།\n"
#, fuzzy, c-format
#| msgid "%s: group '%s' is a NIS group.\n"
msgid "%s: group '%s' is a NIS group\n"
msgstr "%s: སྡེ་ཚན་ '%s' འདི་ ཨེན་ཨའི་ཨེསི་སྡེ་ཚན་ཨིན།\n"
@@ -1118,7 +1053,6 @@ msgid "%s: %s is the NIS master\n"
msgstr "%s: %sའདི་ ཨེན་ཇི་ཨེསི་ ཨམ་ཨིན།\n"
#, fuzzy, c-format
#| msgid "%s: user %s is a NIS user\n"
msgid "%s: user '%s' is already a member of '%s'\n"
msgstr "%s: ལག་ལེན་པ་ %sའདི་ ཨེན་ཨའི་ཨེསི་ ལག་ལེན་པ་ཅིག་ཨིན།\n"
@@ -1127,7 +1061,6 @@ msgid "%s: Out of memory. Cannot update %s.\n"
msgstr "%s: དུས་མཐུན་སྡེ་ཚན་ནང་ལུ་ དྲན་ཚད་ལས་བརྒལ་བ།\n"
#, fuzzy, c-format
#| msgid "Usage: %s [input]\n"
msgid ""
"Usage: %s [options] [action]\n"
"\n"
@@ -1197,7 +1130,6 @@ msgid "%s: unknown user %s\n"
msgstr "%s: མ་ཤེས་པའི་ལག་ལེན་པ་%s\n"
#, fuzzy, c-format
#| msgid "Usage: %s [input]\n"
msgid ""
"Usage: %s [options] [group [gshadow]]\n"
"\n"
@@ -1205,7 +1137,6 @@ msgid ""
msgstr "ལག་ལེན་: %s [ཨིན་པུཊི་]\n"
#, fuzzy, c-format
#| msgid "Usage: %s [input]\n"
msgid ""
"Usage: %s [options] [group]\n"
"\n"
@@ -1221,7 +1152,6 @@ msgid " -s, --sort sort entries by UID\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: -s and -r are incompatibile\n"
msgid "%s: -s and -r are incompatible\n"
msgstr "%s: -s དང་ -r གཉིས་མཐུན་འགྱུར་ཅན་མེན།\n"
@@ -1240,7 +1170,6 @@ msgid "invalid group name '%s'\n"
msgstr "ནུས་མེད་སྡེཚན་གྱི་མིང་ '%s'\n"
#, fuzzy, c-format
#| msgid "invalid group name '%s'\n"
msgid "invalid group ID '%lu'\n"
msgstr "ནུས་མེད་སྡེཚན་གྱི་མིང་ '%s'\n"
@@ -1257,7 +1186,6 @@ msgid "no matching group file entry in %s\n"
msgstr "%sནང་ མཐུན་སྒྲིག་སྡེ་ཚན་གྱི་ཡིག་སྣོད་ཐོ་བཀོད་མེད།\n"
#, fuzzy, c-format
#| msgid "add group '%s' in %s ?"
msgid "add group '%s' in %s? "
msgstr "%sནང་ སྡེ་ཚན་ '%s' ཁ་སྐོང་འབད་ནི་ཨིན་ན?"
@@ -1293,7 +1221,6 @@ msgid "%s: no changes\n"
msgstr "%s: སོར་ནི་མེད།\n"
#, fuzzy, c-format
#| msgid "%s: cannot update file %s\n"
msgid "%s: cannot delete %s\n"
msgstr "%s: ཡིག་སྣོད་ %sའདི་ དུས་མཐུན་བཟོ་མི་ཚུགས།\n"
@@ -1339,12 +1266,10 @@ msgid "**Never logged in**"
msgstr "**ནམ་ཡང་ནང་བསྐྱོད་མ་འབད་**"
#, fuzzy, c-format
#| msgid "%s: cannot create directory %s\n"
msgid "%s: Failed to update the entry for UID %lu\n"
msgstr "%s: སྣོད་ཐོ་ %s གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
#, fuzzy, c-format
#| msgid "%s: can't update password file\n"
msgid "%s: Failed to update the lastlog file\n"
msgstr "%s: ཆོག་ཡིག་ཡིག་སྣོད་ དུས་མཐུན་བཟོ་མ་ཚུགས།\n"
@@ -1398,9 +1323,6 @@ msgstr ""
"utmpཐོ་བཀོད་མིན་འདུག ཁྱོད་ཀྱིས་ གནས་རིམ་དམའ་ཤོས་\"sh\"གི་ནང་ལས་ \"login\"ལག་ལེན་འཐབ་དགོ"
#, fuzzy, c-format
#| msgid ""
#| "\n"
#| "Login timed out after %d seconds.\n"
msgid ""
"\n"
"Login timed out after %u seconds.\n"
@@ -1420,7 +1342,6 @@ msgid "login: "
msgstr "ནང་བསྐྱོད་: "
#, fuzzy, c-format
#| msgid "Maximum number of tries exceeded (%d)\n"
msgid "Maximum number of tries exceeded (%u)\n"
msgstr "འབད་རྩོལ་གྱི་ཨང་གྲངས་མང་མཐའ་ལྷག་ཡོདཔ་(%d)\n"
@@ -1431,7 +1352,6 @@ msgid "Login incorrect"
msgstr "ནང་བསྐྱོད་བདེན་མེད།"
#, fuzzy, c-format
#| msgid "%s: line %d: cannot find user %s\n"
msgid "Cannot find user (%s)\n"
msgstr "%s: གྲལ་ཐིག་ %d:ལག་ལེན་པ་ %sའཚོལ་མི་ཚུགས།\n"
@@ -1474,7 +1394,6 @@ msgstr ""
"\n"
#, fuzzy
#| msgid "Usage: id\n"
msgid "Usage: logoutd\n"
msgstr "ལག་ལེན་པ་: id\n"
@@ -1485,7 +1404,6 @@ msgid "Usage: sg group [[-c] command]\n"
msgstr "ལག་ལེན་: sg group [[-c]བརྡ་བཀོད་ ]\n"
#, fuzzy, c-format
#| msgid "%s: failed to drop privileges (%s)\n"
msgid "%s: failed to crypt password with previous salt: %s\n"
msgstr "%s: ཁེ་དབང་(%s)ཚུ་བཀོག་ནིའི་འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
@@ -1512,7 +1430,6 @@ msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
msgstr "%s: སྡེ་ཚན་ %sམེད།\n"
#, fuzzy, c-format
#| msgid "%s: invalid user name '%s'\n"
msgid "%s: invalid user ID '%s'\n"
msgstr "%s: ནུས་མེད་ལག་ལེན་པའི་མིང་ '%s'།\n"
@@ -1545,12 +1462,10 @@ msgid "%s: line %d: can't update password\n"
msgstr "%s: གྲལ་ཐིག་ %d: ཆོག་ཡིག་དུས་མཐུན་བཟོ་མི་ཚུགས།\n"
#, fuzzy, c-format
#| msgid "%s: line %d: mkdir failed\n"
msgid "%s: line %d: mkdir %s failed: %s\n"
msgstr "%s: གྲལ་ཐིག་ %d: mkdir འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
#, fuzzy, c-format
#| msgid "%s: line %d: chown failed\n"
msgid "%s: line %d: chown %s failed: %s\n"
msgstr "%s: གྲལ་ཐིག་ %d: chown འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
@@ -1559,7 +1474,6 @@ msgid "%s: line %d: can't update entry\n"
msgstr "%s: གྲལ་ཐིག་ %d: ཐོ་བཀོད་དུས་མཐུན་བཟོ་མི་ཚུགས།\n"
#, fuzzy, c-format
#| msgid "%s: failed to drop privileges (%s)\n"
msgid "%s: failed to prepare new %s entry\n"
msgstr "%s: ཁེ་དབང་(%s)ཚུ་བཀོག་ནིའི་འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
@@ -1568,7 +1482,6 @@ msgid "%s: can't find subordinate user range\n"
msgstr "%s: %sགསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
#, fuzzy, c-format
#| msgid "%s: can't update group file\n"
msgid "%s: can't find subordinate group range\n"
msgstr "%s: སྡེ་ཚན་ཡིག་སྣོད་ དུས་མཐུན་བཟོ་མི་ཚུགས།\n"
@@ -1694,17 +1607,14 @@ msgid "The password for %s is unchanged.\n"
msgstr " %sགི་དོན་ལུ་ ཆོག་ཡིག་འདི་མ་སོར་བས།\n"
#, fuzzy, c-format
#| msgid "Password changed."
msgid "%s: password changed.\n"
msgstr "ཆོག་ཡིག་སོར་ཡོདཔ།"
#, fuzzy, c-format
#| msgid "Password Expiration Warning"
msgid "%s: password expiry information changed.\n"
msgstr "ཆོག་ཡིག་དུས་ཡོལ་ཉེན་བརྡ།"
#, fuzzy, c-format
#| msgid "Usage: %s [input]\n"
msgid ""
"Usage: %s [options] [passwd]\n"
"\n"
@@ -1712,7 +1622,6 @@ msgid ""
msgstr "ལག་ལེན་: %s [ཨིན་པུཊི་]\n"
#, fuzzy, c-format
#| msgid "Usage: %s [input]\n"
msgid ""
"Usage: %s [options] [passwd [shadow]]\n"
"\n"
@@ -1737,42 +1646,34 @@ msgid "invalid user name '%s'\n"
msgstr "ནུས་མེད་ལག་ལེན་པའི་མིང་ '%s'\n"
#, fuzzy, c-format
#| msgid "invalid user name '%s'\n"
msgid "invalid user ID '%lu'\n"
msgstr "ནུས་མེད་ལག་ལེན་པའི་མིང་ '%s'\n"
#, fuzzy, c-format
#| msgid "user %s: no group %u\n"
msgid "user '%s': no group %lu\n"
msgstr "ལག་ལེན་པ་ %s: སྡེ་ཚན་ %uམེད།\n"
#, fuzzy, c-format
#| msgid "user %s: directory %s does not exist\n"
msgid "user '%s': directory '%s' does not exist\n"
msgstr "ལག་ལེན་པ་ %s: སྣོད་ཐོ་ %s མེད།\n"
#, fuzzy, c-format
#| msgid "user %s: program %s does not exist\n"
msgid "user '%s': program '%s' does not exist\n"
msgstr "ལག་ལེན་པ་ %s: ལས་རིམ་%s མེད།\n"
#, fuzzy, c-format
#| msgid "%s: cannot create directory %s\n"
msgid "no tcb directory for %s\n"
msgstr "%s: སྣོད་ཐོ་ %s གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
#, fuzzy, c-format
#| msgid "%s: cannot create directory %s\n"
msgid "create tcb directory for %s?"
msgstr "%s: སྣོད་ཐོ་ %s གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
#, fuzzy, c-format
#| msgid "%s: cannot create directory %s\n"
msgid "failed to create tcb directory for %s\n"
msgstr "%s: སྣོད་ཐོ་ %s གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
#, fuzzy, c-format
#| msgid "%s: cannot lock file %s\n"
msgid "%s: cannot lock %s.\n"
msgstr "%s: ཡིག་སྣོད་ %sའདི་ ལྡེ་མིག་བརྐྱབ་མི་ཚུགས།\n"
@@ -1800,12 +1701,10 @@ msgid "user %s: last password change in the future\n"
msgstr "ལག་ལེན་པ་ %s: མ་འོངས་པ་ནང་ མཇུག་གི་ཆོག་ཡིག་སོར་ནི།\n"
#, fuzzy, c-format
#| msgid "%s: cannot open file %s\n"
msgid "%s: cannot sort entries in %s\n"
msgstr "%s: ཡིག་སྣོད་%s ཁ་ཕྱེ་མི་ཚུགས།\n"
#, fuzzy, c-format
#| msgid "%s: can't re-write file\n"
msgid "%s: can't work with tcb enabled\n"
msgstr "%s: ཡིག་སྣོད་ལོག་འབྲི་མི་ཚུགས།\n"
@@ -1823,7 +1722,6 @@ msgid "Please enter your OWN password as authentication.\n"
msgstr "ཁྱོད་རའི་ཆོག་ཡིག་འདི་ བདེན་བཤད་སྦེ་བཙུགས།\n"
#, fuzzy, c-format
#| msgid "%s: cannot lock file %s\n"
msgid "%s: Cannot fork user shell\n"
msgstr "%s: ཡིག་སྣོད་ %sའདི་ ལྡེ་མིག་བརྐྱབ་མི་ཚུགས།\n"
@@ -1893,17 +1791,14 @@ msgid "(Enter your own password)"
msgstr "(ཁྱོད་རའི་ཆོག་ཡིག་རྐྱངམ་ཅིག་བཙུགས་)"
#, fuzzy, c-format
#| msgid "%s: PAM authentication failed\n"
msgid "%s: Authentication failure\n"
msgstr "%s: པི་ཨེ་ཨེམ་ བདེན་བཤད་འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
#, fuzzy, c-format
#| msgid "You are not authorized to su %s\n"
msgid "%s: You are not authorized to su at that time\n"
msgstr "ཁྱོད་ ཟླ་%sལུ་ དབང་སྤྲོད་མ་འབད།\n"
#, fuzzy, c-format
#| msgid "No password entry for 'root'"
msgid "No passwd entry for user '%s'\n"
msgstr "'རྩ་བ་'གི་དོན་ལུ་ ཆོག་ཡིག་ཐོ་བཀོད་མེད།"
@@ -1916,12 +1811,10 @@ msgid "%s: pam_start: error %d\n"
msgstr "%s: pam_start:འཛོལ་བ་%d(_s)\n"
#, fuzzy, c-format
#| msgid "%s: cannot rename directory %s to %s\n"
msgid "%s: Cannot drop the controlling terminal\n"
msgstr "%s: སྣོད་ཐོ་ %s འདི་ %s ལུ་ བསྐྱར་མིང་བཏགས་མི་ཚུགས།\n"
#, fuzzy, c-format
#| msgid "Cannot execute %s"
msgid "Cannot execute %s\n"
msgstr "%sལག་ལེན་འཐབ་མི་ཚུགས།"
@@ -1963,17 +1856,14 @@ msgid "%s: cannot open new defaults file\n"
msgstr "%s: སྔོན་སྒྲིག་ཡིག་སྣོད་གསརཔ་ ཁ་ཕྱེ་མི་ཚུགས།\n"
#, fuzzy, c-format
#| msgid "%s: line %d: chown failed\n"
msgid "%s: line too long in %s: %s..."
msgstr "%s: གྲལ་ཐིག་ %d: chown འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
#, fuzzy, c-format
#| msgid "%s: cannot create directory %s\n"
msgid "%s: Cannot create backup file (%s): %s\n"
msgstr "%s: སྣོད་ཐོ་ %s གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
#, fuzzy, c-format
#| msgid "%s: rename: %s"
msgid "%s: rename: %s: %s\n"
msgstr "%s: བསྐྱར་མིང་བཏགས་:%s"
@@ -1986,7 +1876,6 @@ msgid "%s: too many groups specified (max %d).\n"
msgstr "%s: སྡེ་ཚན་མང་རབས་ཅིག་གསལ་བཀོད་འབད་ཡོདཔ་(མང་མཐའ་ %d)།\n"
#, fuzzy, c-format
#| msgid "Usage: %s [input]\n"
msgid ""
"Usage: %s [options] LOGIN\n"
" %s -D\n"
@@ -2116,7 +2005,6 @@ msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: failed to drop privileges (%s)\n"
msgid "%s: failed to prepare the new %s entry\n"
msgstr "%s: ཁེ་དབང་(%s)ཚུ་བཀོག་ནིའི་འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
@@ -2136,7 +2024,6 @@ msgid "Setting mailbox file permissions"
msgstr "ཡིག་སྒྲོམ་ཡིག་སྣོད་གྱི་གནང་བ་ གཞི་སྒྲིག་འབད་དོ།"
#, fuzzy, c-format
#| msgid "%s: user %s exists\n"
msgid "%s: user '%s' already exists\n"
msgstr "%s: ལག་ལེན་པ་ %sཡོདཔ་ཨིན།\n"
@@ -2152,12 +2039,10 @@ msgid "%s: can't create user\n"
msgstr "%s: %sགསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
#, fuzzy, c-format
#| msgid "%s: UID %u is not unique\n"
msgid "%s: UID %lu is not unique\n"
msgstr "%s: ཡུ་ཨའི་ཌི་ %uའདི་ ཐུན་མོང་མེན།\n"
#, fuzzy, c-format
#| msgid "%s: cannot create directory %s\n"
msgid "%s: Failed to create tcb directory for %s\n"
msgstr "%s: སྣོད་ཐོ་ %s གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
@@ -2208,24 +2093,19 @@ msgid "%s: group %s not removed because it has other members.\n"
msgstr ""
#, fuzzy, c-format
#| msgid ""
#| "%s: Cannot remove group %s which is a primary group for another user.\n"
msgid "%s: group %s is the primary group of another user and is not removed.\n"
msgstr ""
"%s: ལག་ལེན་པ་གཞན་གྱི་དོན་ལུ་ གཞི་རིམ་སྡེ་ཚན་ཅིག་ཨིན་མི་སྡེ་ཚན་ %sའདི་ རྩ་བསྐྲད་གཏང་མི་ཚུགས།\n"
#, fuzzy, c-format
#| msgid "%s: cannot rename directory %s to %s\n"
msgid "%s: cannot remove entry %lu from %s\n"
msgstr "%s: སྣོད་ཐོ་ %s འདི་ %s ལུ་ བསྐྱར་མིང་བཏགས་མི་ཚུགས།\n"
#, fuzzy, c-format
#| msgid "%s: invalid home directory '%s'\n"
msgid "%s: %s mail spool (%s) not found\n"
msgstr "%s: ནུས་མེད་ཁྱིམ་གྱི་སྣོད་ཐོ་ '%s'།\n"
#, fuzzy, c-format
#| msgid "%s: warning: can't remove "
msgid "%s: warning: can't remove %s: %s\n"
msgstr "%s: ཉེན་བརྡ་:རྩ་བསྐྲད་གཏང་མི་ཚུགས།"
@@ -2238,17 +2118,14 @@ msgid "%s: Can't allocate memory, tcb entry for %s not removed.\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: failed to drop privileges (%s)\n"
msgid "%s: Cannot drop privileges: %s\n"
msgstr "%s: ཁེ་དབང་(%s)ཚུ་བཀོག་ནིའི་འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
#, fuzzy, c-format
#| msgid "%s: cannot rename directory %s to %s\n"
msgid "%s: Cannot remove the content of %s: %s\n"
msgstr "%s: སྣོད་ཐོ་ %s འདི་ %s ལུ་ བསྐྱར་མིང་བཏགས་མི་ཚུགས།\n"
#, fuzzy, c-format
#| msgid "%s: cannot rename directory %s to %s\n"
msgid "%s: Cannot remove tcb files for %s: %s\n"
msgstr "%s: སྣོད་ཐོ་ %s འདི་ %s ལུ་ བསྐྱར་མིང་བཏགས་མི་ཚུགས།\n"
@@ -2257,7 +2134,6 @@ msgid "%s: user %s is a NIS user\n"
msgstr "%s: ལག་ལེན་པ་ %sའདི་ ཨེན་ཨའི་ཨེསི་ ལག་ལེན་པ་ཅིག་ཨིན།\n"
#, fuzzy, c-format
#| msgid "%s: invalid home directory '%s'\n"
msgid "%s: %s home directory (%s) not found\n"
msgstr "%s: ནུས་མེད་ཁྱིམ་གྱི་སྣོད་ཐོ་ '%s'།\n"
@@ -2298,7 +2174,7 @@ msgstr ""
msgid ""
" -a, --append append the user to the supplemental GROUPS\n"
" mentioned by the -G option without removing\n"
" him/her from other groups\n"
" the user from other groups\n"
msgstr ""
msgid " -l, --login NEW_LOGIN new value of the login name\n"
@@ -2350,22 +2226,18 @@ msgid ""
msgstr ""
#, fuzzy, c-format
#| msgid "%s: user %s exists\n"
msgid "%s: user '%s' already exists in %s\n"
msgstr "%s: ལག་ལེན་པ་ %sཡོདཔ་ཨིན།\n"
#, fuzzy, c-format
#| msgid "%s: invalid date '%s'\n"
msgid "%s: invalid subordinate uid range '%s'\n"
msgstr "%s: ནུས་མེད་ཚེས་གྲངས་ '%s'།\n"
#, fuzzy, c-format
#| msgid "%s: invalid date '%s'\n"
msgid "%s: invalid subordinate gid range '%s'\n"
msgstr "%s: ནུས་མེད་ཚེས་གྲངས་ '%s'།\n"
#, fuzzy, c-format
#| msgid "%s: cannot open file %s\n"
msgid "%s: no options\n"
msgstr "%s: ཡིག་སྣོད་%s ཁ་ཕྱེ་མི་ཚུགས།\n"
@@ -2396,7 +2268,6 @@ msgid ""
msgstr ""
#, fuzzy, c-format
#| msgid "%s: cannot create directory %s\n"
msgid "%s: Failed to change ownership of the home directory"
msgstr "%s: སྣོད་ཐོ་ %s གསར་བསྐྲུན་འབད་མི་ཚུགས།\n"
@@ -2428,22 +2299,18 @@ msgid "failed to rename mailbox"
msgstr "ཡིག་སྒྲོམ་གྱི་བསྐྱར་མིང་བཏགས་ནི་ལུ་ འཛོལ་བ།"
#, fuzzy, c-format
#| msgid "%s: failed to drop privileges (%s)\n"
msgid "%s: failed to remove uid range %lu-%lu from '%s'\n"
msgstr "%s: ཁེ་དབང་(%s)ཚུ་བཀོག་ནིའི་འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
#, fuzzy, c-format
#| msgid "%s: failed to drop privileges (%s)\n"
msgid "%s: failed to add uid range %lu-%lu from '%s'\n"
msgstr "%s: ཁེ་དབང་(%s)ཚུ་བཀོག་ནིའི་འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
#, fuzzy, c-format
#| msgid "%s: failed to drop privileges (%s)\n"
msgid "%s: failed to remove gid range %lu-%lu from '%s'\n"
msgstr "%s: ཁེ་དབང་(%s)ཚུ་བཀོག་ནིའི་འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
#, fuzzy, c-format
#| msgid "%s: failed to drop privileges (%s)\n"
msgid "%s: failed to add gid range %lu-%lu from '%s'\n"
msgstr "%s: ཁེ་དབང་(%s)ཚུ་བཀོག་ནིའི་འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
@@ -2467,31 +2334,24 @@ msgid " -u, --user which user's tcb shadow file to edit\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: failed to drop privileges (%s)\n"
msgid "%s: failed to remove %s\n"
msgstr "%s: ཁེ་དབང་(%s)ཚུ་བཀོག་ནིའི་འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
#, fuzzy, c-format
#| msgid ""
#| "\n"
#| "%s: %s is unchanged\n"
msgid "%s: %s is unchanged\n"
msgstr ""
"\n"
"%s: %sའདི་ བསྒྱུར་བཅོས་མ་འབད་བས།\n"
#, fuzzy
#| msgid "failed to rename mailbox"
msgid "failed to create scratch directory"
msgstr "ཡིག་སྒྲོམ་གྱི་བསྐྱར་མིང་བཏགས་ནི་ལུ་ འཛོལ་བ།"
#, fuzzy
#| msgid "%s: failed to drop privileges (%s)\n"
msgid "failed to drop privileges"
msgstr "%s: ཁེ་དབང་(%s)ཚུ་བཀོག་ནིའི་འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
#, fuzzy
#| msgid "Couldn't lock file"
msgid "Couldn't get file context"
msgstr "ཡིག་སྣོད་ལྡེ་མིག་བརྐྱབས་མ་ཚུགས།"
@@ -2499,7 +2359,6 @@ msgid "setfscreatecon () failed"
msgstr ""
#, fuzzy
#| msgid "%s: failed to drop privileges (%s)\n"
msgid "failed to gain privileges"
msgstr "%s: ཁེ་དབང་(%s)ཚུ་བཀོག་ནིའི་འཐུས་ཤོར་བྱུང་ཡོདཔ།\n"
@@ -2510,12 +2369,10 @@ msgid "Couldn't make backup"
msgstr "རྒྱབ་ཐག་བཟོ་མ་ཚུགས།"
#, fuzzy, c-format
#| msgid "%s: %s\n"
msgid "%s: %s: %s\n"
msgstr "%s: %s\n"
#, fuzzy, c-format
#| msgid "%s: %s not found in /etc/passwd\n"
msgid "%s: %s returned with status %d\n"
msgstr "%s: /etc/passwd ནང་ལུ་ %s མ་ཐོབ།\n"
@@ -2528,22 +2385,18 @@ msgid "failed to open scratch file"
msgstr "%s: སྡེ་ཚན་ཡིག་སྣོད་ ཁ་ཕྱེ་མ་ཚུགས།\n"
#, fuzzy
#| msgid "%s: fields too long\n"
msgid "failed to unlink scratch file"
msgstr "%s: ས་སྒོ་ཚུ་རིང་དྲགས་པས།\n"
#, fuzzy
#| msgid "failed to rename mailbox"
msgid "failed to stat edited file"
msgstr "ཡིག་སྒྲོམ་གྱི་བསྐྱར་མིང་བཏགས་ནི་ལུ་ འཛོལ་བ།"
#, fuzzy
#| msgid "failed to change mailbox owner"
msgid "failed to allocate memory"
msgstr "ཡིག་སྒྲོམ་བདག་པོ་སོར་ནི་ལུ་ འཐུས་ཤོར་བྱུང་ཡོདཔ།"
#, fuzzy
#| msgid "failed to rename mailbox"
msgid "failed to create backup file"
msgstr "ཡིག་སྒྲོམ་གྱི་བསྐྱར་མིང་བཏགས་ནི་ལུ་ འཛོལ་བ།"
@@ -2552,7 +2405,6 @@ msgid "%s: can't restore %s: %s (your changes are in %s)\n"
msgstr "%s: %sསོར་ཆུད་འབད་མ་ཚུགས་: %s (ཁྱོད་ཀྱི་བསྒྱུར་བཅོས་ཚུ་ %sནང་ཨིན་)།\n"
#, fuzzy, c-format
#| msgid "%s: invalid base directory '%s'\n"
msgid "%s: failed to find tcb directory for %s\n"
msgstr "%s: ནུས་མེད་གཞི་རྟེན་སྣོད་ཐོ་'%s'།\n"
@@ -2831,7 +2683,7 @@ msgstr "%s: ནུས་མེད་གཞི་རྟེན་སྣོད་
#~ "GROUPS\n"
#~ " mentioned by the -G option without "
#~ "removing\n"
#~ " him/her from other groups\n"
#~ " the user from other groups\n"
#~ " -h, --help display this help message and exit\n"
#~ " -l, --login NEW_LOGIN new value of the login name\n"
#~ " -L, --lock lock the user account\n"

View File

@@ -47,7 +47,6 @@ msgid "%s: nscd did not terminate normally (signal %d)\n"
msgstr "%s: το nscd δεν τερμάτισε κανονικά (σήμα %d)\n"
#, fuzzy, c-format
#| msgid "%s: nscd exited with status %d"
msgid "%s: nscd exited with status %d\n"
msgstr "%s: το ncsd τερμάτισε με κατάσταση εξόδου %d"
@@ -433,7 +432,6 @@ msgid "%s: cannot access chroot directory %s: %s\n"
msgstr "%s: αδυναμία προσπέλαση του καταλόγου chroot %s: %s\n"
#, fuzzy, c-format
#| msgid "%s: cannot access chroot directory %s: %s\n"
msgid "%s: cannot chdir to chroot directory %s: %s\n"
msgstr "%s: αδυναμία προσπέλαση του καταλόγου chroot %s: %s\n"
@@ -522,8 +520,9 @@ msgstr ""
"συνθηματικό\n"
" αλλάξει σε ΕΛΑΧ_ΗΜΕΡΕΣ\n"
#, fuzzy
msgid ""
" -M, --maxdays MAX_DAYS set maximim number of days before password\n"
" -M, --maxdays MAX_DAYS set maximum number of days before password\n"
" change to MAX_DAYS\n"
msgstr ""
" -M, --maxdays ΜΕΓ_ΗΜΕΡΕΣ καθορίζει μέγιστο αριθμό ημερών πριν το "
@@ -812,7 +811,6 @@ msgid "%s: line %d: missing new password\n"
msgstr "%s: γραμμή %d: έλλειψη νέου συνθηματικού\n"
#, fuzzy, c-format
#| msgid "%s: Failed to write %s: %s\n"
msgid "%s: failed to crypt password with salt '%s': %s\n"
msgstr "%s: Αποτυχία εγγραφής %s: %s\n"
@@ -1130,8 +1128,6 @@ msgid "%s: Cannot setup cleanup service.\n"
msgstr "%s: Δεν ήταν δυνατή η ρύθμιση της υπηρεσίας εκκαθάρισης.\n"
#, fuzzy
#| msgid ""
#| " -r, --reset reset the counters of login failures\n"
msgid ""
" -f, --force delete group even if it is the primary group "
"of a user\n"
@@ -1369,8 +1365,6 @@ msgstr ""
"παλαιότερες από ΗΜΕΡΕΣ\n"
#, fuzzy
#| msgid ""
#| " -a, --all display faillog records for all users\n"
msgid ""
" -C, --clear clear lastlog record of an user (usable only "
"with -u)\n"
@@ -1379,8 +1373,6 @@ msgstr ""
"τους χρήστες\n"
#, fuzzy
#| msgid ""
#| " -a, --all display faillog records for all users\n"
msgid ""
" -S, --set set lastlog record to current time (usable "
"only with -u)\n"
@@ -1411,12 +1403,10 @@ msgid "**Never logged in**"
msgstr "**Καμιά είσοδος στο σύστημα**"
#, fuzzy, c-format
#| msgid "%s: Failed to get the entry for UID %lu\n"
msgid "%s: Failed to update the entry for UID %lu\n"
msgstr "%s: Aδυναμία ανάκτησης της εγγραφής UID %lu\n"
#, fuzzy, c-format
#| msgid "%s: can't update password file\n"
msgid "%s: Failed to update the lastlog file\n"
msgstr "%s: αδυναμία ανανέωσης αρχείου συνθηματικών\n"
@@ -1552,7 +1542,6 @@ msgid "Usage: sg group [[-c] command]\n"
msgstr "Χρήση: sg ομάδα [[-c] εντολή]\n"
#, fuzzy, c-format
#| msgid "%s: Failed to write %s: %s\n"
msgid "%s: failed to crypt password with previous salt: %s\n"
msgstr "%s: Αποτυχία εγγραφής %s: %s\n"
@@ -1625,17 +1614,14 @@ msgid "%s: line %d: can't update entry\n"
msgstr "%s: γραμμή %d: αδυναμία ανανέωσης καταχώρησης\n"
#, fuzzy, c-format
#| msgid "%s: failed to prepare the new %s entry '%s'\n"
msgid "%s: failed to prepare new %s entry\n"
msgstr "%s: αποτυχία προετοιμασίας της νέας εγγραφής %s '%s'\n"
#, fuzzy, c-format
#| msgid "%s: can't create user\n"
msgid "%s: can't find subordinate user range\n"
msgstr "%s: αδυναμία δημιουργίας του χρήστη\n"
#, fuzzy, c-format
#| msgid "%s: can't update group file\n"
msgid "%s: can't find subordinate group range\n"
msgstr "%s: αδυναμία ανανέωσης για το αρχείο ομάδων\n"
@@ -1659,7 +1645,6 @@ msgstr ""
"ονομαζόμενου λογαριασμού\n"
#, fuzzy
#| msgid " -e, --encrypted supplied passwords are encrypted\n"
msgid " -k, --keep-tokens change password only if expired\n"
msgstr ""
" -e, --encrypted τα παρεχόμενα συνθηματικά είναι "
@@ -1828,7 +1813,6 @@ msgstr ""
"Επιλογές:\n"
#, fuzzy
#| msgid " -q, --quiet quiet mode\n"
msgid " -q, --quiet report errors only\n"
msgstr " -q, --quiet σιωπηλή λειτουργία\n"
@@ -2067,7 +2051,6 @@ msgid "%s: line too long in %s: %s..."
msgstr "%s: πολύ μακριά γραμμή στο %s: %s..."
#, fuzzy, c-format
#| msgid "%s: Cannot create symbolic link %s: %s\n"
msgid "%s: Cannot create backup file (%s): %s\n"
msgstr "%s: Αδυναμία δημιουργίας συμβολικού συνδέσμου %s: %s\n"
@@ -2245,7 +2228,6 @@ msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
msgstr "%s: αποτυχία επαναφοράς της καταχώρησης στο lastlog του UID %lu: %s\n"
#, fuzzy, c-format
#| msgid "%s: failed to prepare the new %s entry '%s'\n"
msgid "%s: failed to prepare the new %s entry\n"
msgstr "%s: αποτυχία προετοιμασίας της νέας εγγραφής %s '%s'\n"
@@ -2292,12 +2274,10 @@ msgid "%s: can't create group\n"
msgstr "%s: αδυναμία δημιουργίας ομάδας\n"
#, fuzzy, c-format
#| msgid "%s: can't create user\n"
msgid "%s: can't create subordinate user IDs\n"
msgstr "%s: αδυναμία δημιουργίας του χρήστη\n"
#, fuzzy, c-format
#| msgid "%s: can't create group\n"
msgid "%s: can't create subordinate group IDs\n"
msgstr "%s: αδυναμία δημιουργίας ομάδας\n"
@@ -2352,7 +2332,6 @@ msgstr ""
"%s: η ομάδα %s είναι πρωταρχική ομάδα για άλλο χρήστη και δεν διαγράφηκε.\n"
#, fuzzy, c-format
#| msgid "%s: cannot remove entry '%s' from %s\n"
msgid "%s: cannot remove entry %lu from %s\n"
msgstr "%s: αδυναμία απομάκρυνσης της εγγραφής '%s' από το %s\n"
@@ -2444,7 +2423,7 @@ msgstr ""
msgid ""
" -a, --append append the user to the supplemental GROUPS\n"
" mentioned by the -G option without removing\n"
" him/her from other groups\n"
" the user from other groups\n"
msgstr ""
" -a, --append προσθήκη του χρήστη στις συμπληρωματικές "
"ΟΜΑΔΕΣ\n"
@@ -2517,12 +2496,10 @@ msgid "%s: user '%s' already exists in %s\n"
msgstr "%s: Ο χρήστης %s υπάρχει ήδη στο %s\n"
#, fuzzy, c-format
#| msgid "%s: invalid date '%s'\n"
msgid "%s: invalid subordinate uid range '%s'\n"
msgstr "%s: Μη έγκυρη ημερομηνία '%s'\n"
#, fuzzy, c-format
#| msgid "%s: invalid date '%s'\n"
msgid "%s: invalid subordinate gid range '%s'\n"
msgstr "%s: Μη έγκυρη ημερομηνία '%s'\n"
@@ -2543,7 +2520,6 @@ msgid "%s: UID '%lu' already exists\n"
msgstr "%s: το UID '%lu' υπάρχει ήδη\n"
#, fuzzy, c-format
#| msgid "%s: %s is not authorized to change the password of %s\n"
msgid "%s: %s does not exist, you cannot use the flags %s or %s\n"
msgstr ""
"%s: ο χρήστης %s δεν είναι εξουσιοδοτημένος να αλλάξει το συνθηματικό του "
@@ -2598,22 +2574,18 @@ msgid "failed to rename mailbox"
msgstr "αποτυχία μετονομασίας γραμματοκιβωτίου"
#, fuzzy, c-format
#| msgid "%s: failed to prepare the new %s entry '%s'\n"
msgid "%s: failed to remove uid range %lu-%lu from '%s'\n"
msgstr "%s: αποτυχία προετοιμασίας της νέας εγγραφής %s '%s'\n"
#, fuzzy, c-format
#| msgid "%s: failed to prepare the new %s entry '%s'\n"
msgid "%s: failed to add uid range %lu-%lu from '%s'\n"
msgstr "%s: αποτυχία προετοιμασίας της νέας εγγραφής %s '%s'\n"
#, fuzzy, c-format
#| msgid "%s: failed to prepare the new %s entry '%s'\n"
msgid "%s: failed to remove gid range %lu-%lu from '%s'\n"
msgstr "%s: αποτυχία προετοιμασίας της νέας εγγραφής %s '%s'\n"
#, fuzzy, c-format
#| msgid "%s: failed to prepare the new %s entry '%s'\n"
msgid "%s: failed to add gid range %lu-%lu from '%s'\n"
msgstr "%s: αποτυχία προετοιμασίας της νέας εγγραφής %s '%s'\n"
@@ -2673,12 +2645,10 @@ msgid "Couldn't make backup"
msgstr "Αδυναμία δημιουργίας αντιγράφου ασφαλείας "
#, fuzzy, c-format
#| msgid "%s: PAM: %s\n"
msgid "%s: %s: %s\n"
msgstr "%s: PAM: %s\n"
#, fuzzy, c-format
#| msgid "%s: nscd exited with status %d"
msgid "%s: %s returned with status %d\n"
msgstr "%s: το ncsd τερμάτισε με κατάσταση εξόδου %d"
@@ -2981,7 +2951,7 @@ msgstr "%s: αποτυχία εύρεσης καταλόγου tcb %s\n"
#~ "GROUPS\n"
#~ " mentioned by the -G option without "
#~ "removing\n"
#~ " him/her from other groups\n"
#~ " the user from other groups\n"
#~ " -h, --help display this help message and exit\n"
#~ " -l, --login NEW_LOGIN new value of the login name\n"
#~ " -L, --lock lock the user account\n"

View File

@@ -114,7 +114,6 @@ msgid "Could not set serange for %s\n"
msgstr ""
#, fuzzy, c-format
#| msgid "Could not allocate space for config info.\n"
msgid "Could not set sename for %s\n"
msgstr "No se pudo reservar espacio para la información de configuración.\n"
@@ -123,7 +122,6 @@ msgid "Could not modify login mapping for %s\n"
msgstr ""
#, fuzzy, c-format
#| msgid "Changing the aging information for %s\n"
msgid "Cannot create SELinux login mapping for %s\n"
msgstr "Cambiando la información de la edad para %s\n"
@@ -144,12 +142,10 @@ msgid "Cannot init SELinux management\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: Cannot determine your user name.\n"
msgid "Cannot create SELinux user key\n"
msgstr "%s: no se pudo determinar su nombre de usuario.\n"
#, fuzzy, c-format
#| msgid "%s: line %d: cannot find user %s\n"
msgid "Cannot verify the SELinux user\n"
msgstr "%s: línea %d: no se puede encontrar el usuario %s\n"
@@ -449,22 +445,18 @@ msgid "%s: failed to drop privileges (%s)\n"
msgstr "%s: se produjo un fallo al desprenderse de los privilegios (%s)\n"
#, fuzzy, c-format
#| msgid "%s: invalid home phone: '%s'\n"
msgid "%s: invalid chroot path '%s'\n"
msgstr "%s: teléfono de casa incorrecto: «%s»\n"
#, fuzzy, c-format
#| msgid "%s: Cannot create directory %s: %s\n"
msgid "%s: cannot access chroot directory %s: %s\n"
msgstr "%s: no se pudo crear el directorio %s: %s\n"
#, fuzzy, c-format
#| msgid "%s: Cannot create directory %s: %s\n"
msgid "%s: cannot chdir to chroot directory %s: %s\n"
msgstr "%s: no se pudo crear el directorio %s: %s\n"
#, fuzzy, c-format
#| msgid "%s: Failed to create tcb directory for %s\n"
msgid "%s: unable to chroot to directory %s: %s\n"
msgstr "%s: se produjo un fallo al crear el directorio tcb para %s\n"
@@ -546,8 +538,9 @@ msgstr ""
" -m, --mindays DÍAS_MIN establece el número mínimo de días antes de\n"
" cambiar la contraseña a DÍAS_MIN\n"
#, fuzzy
msgid ""
" -M, --maxdays MAX_DAYS set maximim number of days before password\n"
" -M, --maxdays MAX_DAYS set maximum number of days before password\n"
" change to MAX_DAYS\n"
msgstr ""
" -M, --maxdays DÍAS_MAX establece el número máximo de días antes de\n"
@@ -635,7 +628,6 @@ msgid "%s: Cannot determine your user name.\n"
msgstr "%s: no se pudo determinar su nombre de usuario.\n"
#, fuzzy, c-format
#| msgid "%s: %s\n"
msgid "%s: PAM: %s\n"
msgstr "%s: %s\n"
@@ -786,7 +778,6 @@ msgstr ""
"Opciones:\n"
#, fuzzy, c-format
#| msgid " -c, --crypt-method <METHOD> the crypt method (one of %s)\n"
msgid " -c, --crypt-method METHOD the crypt method (one of %s)\n"
msgstr " -c, --crypt-method <MÉTODO> el método de cifrado (uno de %s)\n"
@@ -829,7 +820,6 @@ msgid "%s: line %d: missing new password\n"
msgstr "%s: línea %d: falta la nueva contraseña\n"
#, fuzzy, c-format
#| msgid "%s: failed to remove %s\n"
msgid "%s: failed to crypt password with salt '%s': %s\n"
msgstr "%s: se produjo un fallo al eliminar %s\n"
@@ -983,7 +973,6 @@ msgid "%s: Cannot get the size of %s: %s\n"
msgstr "%s: no se pudo conseguir el tamaño de %s: %s\n"
#, fuzzy, c-format
#| msgid "%s: failed to remove %s\n"
msgid "%s: Failed to write %s: %s\n"
msgstr "%s: se produjo un fallo al eliminar %s\n"
@@ -1142,13 +1131,10 @@ msgid "%s: GID '%lu' already exists\n"
msgstr "%s: el GID «%lu» ya existe\n"
#, fuzzy, c-format
#| msgid "%s: Cannot determine your user name.\n"
msgid "%s: Cannot setup cleanup service.\n"
msgstr "%s: no se pudo determinar su nombre de usuario.\n"
#, fuzzy
#| msgid ""
#| " -r, --reset reset the counters of login failures\n"
msgid ""
" -f, --force delete group even if it is the primary group "
"of a user\n"
@@ -1386,8 +1372,6 @@ msgstr ""
" a DÍAS\n"
#, fuzzy
#| msgid ""
#| " -a, --all display faillog records for all users\n"
msgid ""
" -C, --clear clear lastlog record of an user (usable only "
"with -u)\n"
@@ -1396,8 +1380,6 @@ msgstr ""
" todos los usuarios\n"
#, fuzzy
#| msgid ""
#| " -a, --all display faillog records for all users\n"
msgid ""
" -S, --set set lastlog record to current time (usable "
"only with -u)\n"
@@ -1428,12 +1410,10 @@ msgid "**Never logged in**"
msgstr "**Nunca ha accedido**"
#, fuzzy, c-format
#| msgid "%s: Failed to get the entry for UID %lu\n"
msgid "%s: Failed to update the entry for UID %lu\n"
msgstr "%s: Se produjo un fallo al conseguir la entrada para el UID %lu\n"
#, fuzzy, c-format
#| msgid "%s: can't update password file\n"
msgid "%s: Failed to update the lastlog file\n"
msgstr "%s: no puedo actualizar el fichero de contraseñas\n"
@@ -1515,7 +1495,6 @@ msgid "Login incorrect"
msgstr "Identificación incorrecta"
#, fuzzy, c-format
#| msgid "%s: line %d: cannot find user %s\n"
msgid "Cannot find user (%s)\n"
msgstr "%s: línea %d: no se puede encontrar el usuario %s\n"
@@ -1567,7 +1546,6 @@ msgid "Usage: sg group [[-c] command]\n"
msgstr "Modo de uso: sg grupo [[-c] orden]\n"
#, fuzzy, c-format
#| msgid "%s: failed to remove %s\n"
msgid "%s: failed to crypt password with previous salt: %s\n"
msgstr "%s: se produjo un fallo al eliminar %s\n"
@@ -1639,17 +1617,14 @@ msgid "%s: line %d: can't update entry\n"
msgstr "%s: línea %d: no se puede actualizar la entrada\n"
#, fuzzy, c-format
#| msgid "%s: failed to prepare the new %s entry '%s'\n"
msgid "%s: failed to prepare new %s entry\n"
msgstr "%s: se produjo un fallo al preparar la nueva %s entrada «%s»\n"
#, fuzzy, c-format
#| msgid "%s: can't create user\n"
msgid "%s: can't find subordinate user range\n"
msgstr "%s: no se pudo crear el usuario\n"
#, fuzzy, c-format
#| msgid "%s: can't update group file\n"
msgid "%s: can't find subordinate group range\n"
msgstr "%s: no se puede actualizar el fichero de grupo\n"
@@ -1811,10 +1786,6 @@ msgid "%s: password expiry information changed.\n"
msgstr "%s: información de caducidad de la contraseña cambiada.\n"
#, fuzzy, c-format
#| msgid ""
#| "Usage: %s [options] [action]\n"
#| "\n"
#| "Options:\n"
msgid ""
"Usage: %s [options] [passwd]\n"
"\n"
@@ -1835,7 +1806,6 @@ msgstr ""
"Opciones:\n"
#, fuzzy
#| msgid " -q, --quiet quiet mode\n"
msgid " -q, --quiet report errors only\n"
msgstr " -q, --quiet modo silencioso\n"
@@ -2013,7 +1983,6 @@ msgid "%s: You are not authorized to su at that time\n"
msgstr "%s: no está autorizado a usar su en este momento\n"
#, fuzzy, c-format
#| msgid "No password entry for 'root'"
msgid "No passwd entry for user '%s'\n"
msgstr "Sin entrada de contraseña para el administrador («root»)"
@@ -2026,7 +1995,6 @@ msgid "%s: pam_start: error %d\n"
msgstr "%s: pam_start: error %d\n"
#, fuzzy, c-format
#| msgid "%s: Cannot remove the content of %s: %s\n"
msgid "%s: Cannot drop the controlling terminal\n"
msgstr "%s: no se pudo eliminar el contenido de %s: %s\n"
@@ -2079,7 +2047,6 @@ msgid "%s: line too long in %s: %s..."
msgstr "%s: línea demasiado larga en %s: %s..."
#, fuzzy, c-format
#| msgid "%s: Cannot create symbolic link %s: %s\n"
msgid "%s: Cannot create backup file (%s): %s\n"
msgstr "%s no se pudo crear el enlace simbólico %s: %s\n"
@@ -2263,7 +2230,6 @@ msgstr ""
"%s: se produjo un fallo al reiniciar la entrada de lastlog del UID %lu: %s\n"
#, fuzzy, c-format
#| msgid "%s: failed to prepare the new %s entry '%s'\n"
msgid "%s: failed to prepare the new %s entry\n"
msgstr "%s: se produjo un fallo al preparar la nueva %s entrada «%s»\n"
@@ -2310,12 +2276,10 @@ msgid "%s: can't create group\n"
msgstr "%s: no se puede crear el grupo\n"
#, fuzzy, c-format
#| msgid "%s: can't create user\n"
msgid "%s: can't create subordinate user IDs\n"
msgstr "%s: no se pudo crear el usuario\n"
#, fuzzy, c-format
#| msgid "%s: can't create group\n"
msgid "%s: can't create subordinate group IDs\n"
msgstr "%s: no se puede crear el grupo\n"
@@ -2347,9 +2311,6 @@ msgstr ""
" correo\n"
#, fuzzy
#| msgid ""
#| " -Z, --selinux-user new SELinux user mapping for the user "
#| "account\n"
msgid ""
" -Z, --selinux-user remove any SELinux user mapping for the "
"user\n"
@@ -2358,7 +2319,6 @@ msgstr ""
" usuario\n"
#, fuzzy, c-format
#| msgid "%s: cannot remove the primary group of user '%s'\n"
msgid ""
"%s: group %s not removed because it is not the primary group of user %s.\n"
msgstr "%s: no se pudo eliminar el grupo primario del usuario «%s»\n"
@@ -2372,12 +2332,10 @@ msgid "%s: group %s is the primary group of another user and is not removed.\n"
msgstr "%s: grupo %s es el grupo primario de otro usuario y no se eliminará.\n"
#, fuzzy, c-format
#| msgid "%s: cannot remove entry '%s' from %s\n"
msgid "%s: cannot remove entry %lu from %s\n"
msgstr "%s: no se pudo eliminar la entrada «%s» de %s\n"
#, fuzzy, c-format
#| msgid "%s: %s home directory (%s) not found\n"
msgid "%s: %s mail spool (%s) not found\n"
msgstr "%s: %s directorio personal (%s) no encontrado\n"
@@ -2424,7 +2382,6 @@ msgid "%s: error removing directory %s\n"
msgstr "%s: error eliminando el directorio %s\n"
#, fuzzy, c-format
#| msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
msgid "%s: warning: the user name %s to SELinux user mapping removal failed.\n"
msgstr ""
"%s: aviso: no se pudo relacionar el nombre del usuario %s con el usuario %s "
@@ -2462,7 +2419,7 @@ msgstr " -G, --groups GRUPOS lista de grupos suplementarios\n"
msgid ""
" -a, --append append the user to the supplemental GROUPS\n"
" mentioned by the -G option without removing\n"
" him/her from other groups\n"
" the user from other groups\n"
msgstr ""
msgid " -l, --login NEW_LOGIN new value of the login name\n"
@@ -2511,9 +2468,6 @@ msgid " -W, --del-subgids FIRST-LAST remove range of subordinate gids\n"
msgstr ""
#, fuzzy
#| msgid ""
#| " -Z, --selinux-user new SELinux user mapping for the user "
#| "account\n"
msgid ""
" -Z, --selinux-user SEUSER new SELinux user mapping for the user "
"account\n"
@@ -2535,17 +2489,14 @@ msgid "%s: user '%s' already exists in %s\n"
msgstr "%s: el usuario «%s» ya existe en %s\n"
#, fuzzy, c-format
#| msgid "%s: invalid date '%s'\n"
msgid "%s: invalid subordinate uid range '%s'\n"
msgstr "%s: fecha «%s» incorrecta\n"
#, fuzzy, c-format
#| msgid "%s: invalid date '%s'\n"
msgid "%s: invalid subordinate gid range '%s'\n"
msgstr "%s: fecha «%s» incorrecta\n"
#, fuzzy, c-format
#| msgid "%s: cannot open %s\n"
msgid "%s: no options\n"
msgstr "%s: no se pudo abrir %s\n"
@@ -2562,7 +2513,6 @@ msgid "%s: UID '%lu' already exists\n"
msgstr "%s: el UID «%lu» ya existe\n"
#, fuzzy, c-format
#| msgid "%s: %s is not authorized to change the password of %s\n"
msgid "%s: %s does not exist, you cannot use the flags %s or %s\n"
msgstr "%s: %s no está autorizado a cambiar la contraseña de %s\n"
@@ -2614,22 +2564,18 @@ msgid "failed to rename mailbox"
msgstr "se produjo un fallo al cambiar el nombre del buzón de correo"
#, fuzzy, c-format
#| msgid "%s: failed to prepare the new %s entry '%s'\n"
msgid "%s: failed to remove uid range %lu-%lu from '%s'\n"
msgstr "%s: se produjo un fallo al preparar la nueva %s entrada «%s»\n"
#, fuzzy, c-format
#| msgid "%s: failed to prepare the new %s entry '%s'\n"
msgid "%s: failed to add uid range %lu-%lu from '%s'\n"
msgstr "%s: se produjo un fallo al preparar la nueva %s entrada «%s»\n"
#, fuzzy, c-format
#| msgid "%s: failed to prepare the new %s entry '%s'\n"
msgid "%s: failed to remove gid range %lu-%lu from '%s'\n"
msgstr "%s: se produjo un fallo al preparar la nueva %s entrada «%s»\n"
#, fuzzy, c-format
#| msgid "%s: failed to prepare the new %s entry '%s'\n"
msgid "%s: failed to add gid range %lu-%lu from '%s'\n"
msgstr "%s: se produjo un fallo al preparar la nueva %s entrada «%s»\n"
@@ -2689,12 +2635,10 @@ msgid "Couldn't make backup"
msgstr "No se puede realizar una copia de seguridad"
#, fuzzy, c-format
#| msgid "%s: %s\n"
msgid "%s: %s: %s\n"
msgstr "%s: %s\n"
#, fuzzy, c-format
#| msgid "%s: %s not found in /etc/passwd\n"
msgid "%s: %s returned with status %d\n"
msgstr "%s: no se encontró %s en /etc/passwd\n"
@@ -3019,7 +2963,7 @@ msgstr "%s: se produjo un fallo al buscar el directorio tcb de %s\n"
#~ "GROUPS\n"
#~ " mentioned by the -G option without "
#~ "removing\n"
#~ " him/her from other groups\n"
#~ " the user from other groups\n"
#~ " -h, --help display this help message and exit\n"
#~ " -l, --login NEW_LOGIN new value of the login name\n"
#~ " -L, --lock lock the user account\n"

108
po/eu.po
View File

@@ -90,7 +90,6 @@ msgid "Could not set serange for %s\n"
msgstr ""
#, fuzzy, c-format
#| msgid "Could not allocate space for config info.\n"
msgid "Could not set sename for %s\n"
msgstr "Ezin izan da lekua esleitu, konfigurazioaren informaziorako.\n"
@@ -99,7 +98,6 @@ msgid "Could not modify login mapping for %s\n"
msgstr ""
#, fuzzy, c-format
#| msgid "Changing the aging information for %s\n"
msgid "Cannot create SELinux login mapping for %s\n"
msgstr "%s(r)en data informazioa aldatzen\n"
@@ -120,12 +118,10 @@ msgid "Cannot init SELinux management\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: Cannot determine your user name.\n"
msgid "Cannot create SELinux user key\n"
msgstr "%s: Ezin da Erabiltzaile izena zehaztu.\n"
#, fuzzy, c-format
#| msgid "%s: Cannot determine your user name.\n"
msgid "Cannot verify the SELinux user\n"
msgstr "%s: Ezin da Erabiltzaile izena zehaztu.\n"
@@ -158,17 +154,14 @@ msgid "%s: out of memory\n"
msgstr "%s: memoriarik ez\n"
#, fuzzy, c-format
#| msgid "%s: cannot delete %s\n"
msgid "%s: Cannot stat %s: %s\n"
msgstr "%s: ezin da %s ezabatu\n"
#, fuzzy, c-format
#| msgid "%s: %s home directory (%s) not found\n"
msgid "%s: %s is neither a directory, nor a symlink.\n"
msgstr "%s: %s etxe-direktorioa (%s) ez dago\n"
#, fuzzy, c-format
#| msgid "%s: cannot remove entry '%s' from %s\n"
msgid "%s: Cannot read symbolic link %s: %s\n"
msgstr "%s: ezin da '%s' sarrera %s-tik kendu\n"
@@ -177,57 +170,46 @@ msgid "%s: Suspiciously long symlink: %s\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: cannot create directory %s\n"
msgid "%s: Cannot create directory %s: %s\n"
msgstr "%s: ezin da %s direktorioa sortu\n"
#, fuzzy, c-format
#| msgid "lastlog: Cannot get the size of %s: %s\n"
msgid "%s: Cannot change owner of %s: %s\n"
msgstr "lastlog: Ezinda %s-ren tamaina eskuratu: %s\n"
#, fuzzy, c-format
#| msgid "%s: warning: can't remove %s: %s\n"
msgid "%s: Cannot change mode of %s: %s\n"
msgstr "%s: abisua: ezin da %s ezabatu: %s\n"
#, fuzzy, c-format
#| msgid "%s: rename: %s: %s"
msgid "%s: unlink: %s: %s\n"
msgstr "%s: berrizendatu: %s: %s"
#, fuzzy, c-format
#| msgid "%s: cannot rename directory %s to %s\n"
msgid "%s: Cannot remove directory %s: %s\n"
msgstr "%s: ezin da %s direktorioa %s gisa izenez aldatu\n"
#, fuzzy, c-format
#| msgid "%s: cannot rename directory %s to %s\n"
msgid "%s: Cannot rename %s to %s: %s\n"
msgstr "%s: ezin da %s direktorioa %s gisa izenez aldatu\n"
#, fuzzy, c-format
#| msgid "%s: warning: can't remove %s: %s\n"
msgid "%s: Cannot remove %s: %s\n"
msgstr "%s: abisua: ezin da %s ezabatu: %s\n"
#, fuzzy, c-format
#| msgid "%s: cannot create directory %s\n"
msgid "%s: Cannot create symbolic link %s: %s\n"
msgstr "%s: ezin da %s direktorioa sortu\n"
#, fuzzy, c-format
#| msgid "lastlog: Cannot get the size of %s: %s\n"
msgid "%s: Cannot change owners of %s: %s\n"
msgstr "lastlog: Ezinda %s-ren tamaina eskuratu: %s\n"
#, fuzzy, c-format
#| msgid "%s: cannot delete %s\n"
msgid "%s: Cannot lstat %s: %s\n"
msgstr "%s: ezin da %s ezabatu\n"
#, fuzzy, c-format
#| msgid "%s: (line %d, user %s) password not changed\n"
msgid "%s: Warning, user %s has no tcb shadow file.\n"
msgstr "%s: `(%d lerroa, %s erabiltzailea) pasahitza ez da aldatu\n"
@@ -238,12 +220,10 @@ msgid ""
msgstr ""
#, fuzzy, c-format
#| msgid "%s: rename: %s: %s"
msgid "%s: mkdir: %s: %s\n"
msgstr "%s: berrizendatu: %s: %s"
#, fuzzy, c-format
#| msgid "%s: cannot open %s\n"
msgid "%s: Cannot open %s: %s\n"
msgstr "%s: ezin da %s ireki\n"
@@ -332,12 +312,10 @@ msgid ""
msgstr ""
#, fuzzy, c-format
#| msgid "failed to change mailbox owner"
msgid "%s: failed to allocate memory: %s\n"
msgstr "huts egin du postontzia jabez aldatzean"
#, fuzzy, c-format
#| msgid "%s: Can't get unique system UID (no more available UIDs)\n"
msgid "%s: Can't get unique system GID (no more available GIDs)\n"
msgstr ""
"%s: Ezin da sistema UID bakarra lortu (ez dago UID erabilgarri gehiago)\n"
@@ -433,22 +411,18 @@ msgid "%s: failed to drop privileges (%s)\n"
msgstr "%s: huts baimenak kentzerakoan (%s)\n"
#, fuzzy, c-format
#| msgid "%s: invalid home phone: '%s'\n"
msgid "%s: invalid chroot path '%s'\n"
msgstr "%s: etxeko tlf baliogabea: '%s'\n"
#, fuzzy, c-format
#| msgid "%s: cannot create directory %s\n"
msgid "%s: cannot access chroot directory %s: %s\n"
msgstr "%s: ezin da %s direktorioa sortu\n"
#, fuzzy, c-format
#| msgid "%s: cannot create directory %s\n"
msgid "%s: cannot chdir to chroot directory %s: %s\n"
msgstr "%s: ezin da %s direktorioa sortu\n"
#, fuzzy, c-format
#| msgid "%s: cannot create directory %s\n"
msgid "%s: unable to chroot to directory %s: %s\n"
msgstr "%s: ezin da %s direktorioa sortu\n"
@@ -528,8 +502,9 @@ msgstr ""
" -m, --mindays GUTXI_EGUN pasahitz aldaketa gutxieneko data\n"
" GUTXI_EGUN-era aldatu\n"
#, fuzzy
msgid ""
" -M, --maxdays MAX_DAYS set maximim number of days before password\n"
" -M, --maxdays MAX_DAYS set maximum number of days before password\n"
" change to MAX_DAYS\n"
msgstr ""
" -M, --maxdays GEHI_EGUN pasashitz aldaketa gehienezko data\n"
@@ -764,7 +739,6 @@ msgstr ""
"Aukerak:\n"
#, fuzzy, c-format
#| msgid " -c, --crypt-method the crypt method (one of %s)\n"
msgid " -c, --crypt-method METHOD the crypt method (one of %s)\n"
msgstr " -c, --crypt-method zifratze metodoa (%s-etako bat)\n"
@@ -806,7 +780,6 @@ msgid "%s: line %d: missing new password\n"
msgstr "%s: %d. lerroa: pasahitz berria falta da\n"
#, fuzzy, c-format
#| msgid "%s: failed to remove %s\n"
msgid "%s: failed to crypt password with salt '%s': %s\n"
msgstr "%s: huts %s kentzerakoan\n"
@@ -854,12 +827,10 @@ msgid "%s: %s is an invalid shell\n"
msgstr "%s: %s shell baliogabea da\n"
#, fuzzy, c-format
#| msgid "%s: user '%s' does not exist\n"
msgid "%s: Warning: %s does not exist\n"
msgstr "%s: '%s' erabiltzailea ez da existitzen\n"
#, fuzzy, c-format
#| msgid "%s: warning: %s not owned by %s\n"
msgid "%s: Warning: %s is not executable\n"
msgstr "%s: abisua: %s ez dago %s(r)en jabegoan\n"
@@ -957,7 +928,6 @@ msgid "%s: Cannot get the size of %s: %s\n"
msgstr "%s: Ezinda %s-ren tamaina eskuratu: %s\n"
#, fuzzy, c-format
#| msgid "%s: failed to remove %s\n"
msgid "%s: Failed to write %s: %s\n"
msgstr "%s: huts %s kentzerakoan\n"
@@ -1050,10 +1020,6 @@ msgid "%s: Not a tty\n"
msgstr "%s: ez da tty\n"
#, fuzzy, c-format
#| msgid ""
#| "Usage: %s [options]\n"
#| "\n"
#| "Options:\n"
msgid ""
"Usage: %s [options] GROUP\n"
"\n"
@@ -1116,13 +1082,10 @@ msgid "%s: GID '%lu' already exists\n"
msgstr "%s: '%lu' GIDa badago dagoeneko\n"
#, fuzzy, c-format
#| msgid "%s: Cannot determine your user name.\n"
msgid "%s: Cannot setup cleanup service.\n"
msgstr "%s: Ezin da Erabiltzaile izena zehaztu.\n"
#, fuzzy
#| msgid ""
#| " -r, --reset reset the counters of login failures\n"
msgid ""
" -f, --force delete group even if it is the primary group "
"of a user\n"
@@ -1211,7 +1174,6 @@ msgid "%s: only root can use the -g/--group option\n"
msgstr "%s: root-ek bakarrik erabili dezake -g/--group aukera\n"
#, fuzzy
#| msgid " -r, --system create system accounts\n"
msgid " -g, --gid GID change the group ID to GID\n"
msgstr " -r, --system sortu sistema kontuak\n"
@@ -1358,8 +1320,6 @@ msgstr ""
" erregistroak\n"
#, fuzzy
#| msgid ""
#| " -a, --all display faillog records for all users\n"
msgid ""
" -C, --clear clear lastlog record of an user (usable only "
"with -u)\n"
@@ -1368,8 +1328,6 @@ msgstr ""
" erregistroak bistaratzen ditu\n"
#, fuzzy
#| msgid ""
#| " -a, --all display faillog records for all users\n"
msgid ""
" -S, --set set lastlog record to current time (usable "
"only with -u)\n"
@@ -1400,12 +1358,10 @@ msgid "**Never logged in**"
msgstr "**Inoiz ez du saiorik hasi**"
#, fuzzy, c-format
#| msgid "%s: Failed to get the entry for UID %lu\n"
msgid "%s: Failed to update the entry for UID %lu\n"
msgstr "%s: Huts %lu UIDaren sarrera eskuratzean\n"
#, fuzzy, c-format
#| msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
msgid "%s: Failed to update the lastlog file\n"
msgstr "%s: huts %lu UIDaren lastlog sarrera berrezartzean: %s\n"
@@ -1489,7 +1445,6 @@ msgid "Login incorrect"
msgstr "Izen okerra"
#, fuzzy, c-format
#| msgid "%s: Cannot determine your user name.\n"
msgid "Cannot find user (%s)\n"
msgstr "%s: Ezin da Erabiltzaile izena zehaztu.\n"
@@ -1542,7 +1497,6 @@ msgid "Usage: sg group [[-c] command]\n"
msgstr "Erabilera: sg taldea [[-c] komandoa]\n"
#, fuzzy, c-format
#| msgid "%s: failed to remove %s\n"
msgid "%s: failed to crypt password with previous salt: %s\n"
msgstr "%s: huts %s kentzerakoan\n"
@@ -1614,17 +1568,14 @@ msgid "%s: line %d: can't update entry\n"
msgstr "%s: %d lerroa: ezin da sarrera eguneratu\n"
#, fuzzy, c-format
#| msgid "%s: failed to prepare the new %s entry '%s'\n"
msgid "%s: failed to prepare new %s entry\n"
msgstr "%s: huts %s sarrera berria prestatzean '%s'\n"
#, fuzzy, c-format
#| msgid "%s: can't create user\n"
msgid "%s: can't find subordinate user range\n"
msgstr "%s: ezin da erabiltzailea sortu\n"
#, fuzzy, c-format
#| msgid "%s: can't create group\n"
msgid "%s: can't find subordinate group range\n"
msgstr "%s: ezin da taldea sortu\n"
@@ -1781,10 +1732,6 @@ msgid "%s: password expiry information changed.\n"
msgstr "%s: pasahitz iraungitzea informazioa aldatua.\n"
#, fuzzy, c-format
#| msgid ""
#| "Usage: %s [options]\n"
#| "\n"
#| "Options:\n"
msgid ""
"Usage: %s [options] [passwd]\n"
"\n"
@@ -1805,7 +1752,6 @@ msgstr ""
"Aukerak:\n"
#, fuzzy
#| msgid " -r, --system create system accounts\n"
msgid " -q, --quiet report errors only\n"
msgstr " -r, --system sortu sistema kontuak\n"
@@ -1840,22 +1786,18 @@ msgid "user '%s': program '%s' does not exist\n"
msgstr "'%s' erabiltzailea: '%s' programa ez da existitzen\n"
#, fuzzy, c-format
#| msgid "%s: cannot create directory %s\n"
msgid "no tcb directory for %s\n"
msgstr "%s: ezin da %s direktorioa sortu\n"
#, fuzzy, c-format
#| msgid "%s: cannot create directory %s\n"
msgid "create tcb directory for %s?"
msgstr "%s: ezin da %s direktorioa sortu\n"
#, fuzzy, c-format
#| msgid "%s: cannot create directory %s\n"
msgid "failed to create tcb directory for %s\n"
msgstr "%s: ezin da %s direktorioa sortu\n"
#, fuzzy, c-format
#| msgid "%s: cannot open %s\n"
msgid "%s: cannot lock %s.\n"
msgstr "%s: ezin da %s ireki\n"
@@ -1906,7 +1848,6 @@ msgid "Please enter your OWN password as authentication.\n"
msgstr "Sartu zure pasahitz PROPIOA autentifikazio gisa.\n"
#, fuzzy, c-format
#| msgid "%s: Cannot determine your user name.\n"
msgid "%s: Cannot fork user shell\n"
msgstr "%s: Ezin da Erabiltzaile izena zehaztu.\n"
@@ -1984,7 +1925,6 @@ msgid "%s: You are not authorized to su at that time\n"
msgstr "%s: Ez duzu orain su erabiltzeko baimenik\n"
#, fuzzy, c-format
#| msgid "No password entry for 'root'"
msgid "No passwd entry for user '%s'\n"
msgstr "Ez dago 'root'-en pasahitzik"
@@ -1997,7 +1937,6 @@ msgid "%s: pam_start: error %d\n"
msgstr "%s: pam_start: %d errorea\n"
#, fuzzy, c-format
#| msgid "lastlog: Cannot get the size of %s: %s\n"
msgid "%s: Cannot drop the controlling terminal\n"
msgstr "lastlog: Ezinda %s-ren tamaina eskuratu: %s\n"
@@ -2047,7 +1986,6 @@ msgid "%s: line too long in %s: %s..."
msgstr "%s: lerro luzeegia %s-n: %s..."
#, fuzzy, c-format
#| msgid "%s: cannot create directory %s\n"
msgid "%s: Cannot create backup file (%s): %s\n"
msgstr "%s: ezin da %s direktorioa sortu\n"
@@ -2078,9 +2016,6 @@ msgstr ""
"Aukerak:\n"
#, fuzzy
#| msgid ""
#| " -b, --base-dir BASE_DIR base directory for the new user account\n"
#| " home directory\n"
msgid ""
" -b, --base-dir BASE_DIR base directory for the home directory of "
"the\n"
@@ -2206,7 +2141,6 @@ msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
msgstr "%s: huts %lu UIDaren lastlog sarrera berrezartzean: %s\n"
#, fuzzy, c-format
#| msgid "%s: failed to prepare the new %s entry '%s'\n"
msgid "%s: failed to prepare the new %s entry\n"
msgstr "%s: huts %s sarrera berria prestatzean '%s'\n"
@@ -2245,7 +2179,6 @@ msgid "%s: UID %lu is not unique\n"
msgstr "%s: %lu UIDa ez da bakarra\n"
#, fuzzy, c-format
#| msgid "%s: cannot create directory %s\n"
msgid "%s: Failed to create tcb directory for %s\n"
msgstr "%s: ezin da %s direktorioa sortu\n"
@@ -2254,12 +2187,10 @@ msgid "%s: can't create group\n"
msgstr "%s: ezin da taldea sortu\n"
#, fuzzy, c-format
#| msgid "%s: can't create user\n"
msgid "%s: can't create subordinate user IDs\n"
msgstr "%s: ezin da erabiltzailea sortu\n"
#, fuzzy, c-format
#| msgid "%s: can't create group\n"
msgid "%s: can't create subordinate group IDs\n"
msgstr "%s: ezin da taldea sortu\n"
@@ -2289,9 +2220,6 @@ msgstr ""
" -r, --remove etxe direktorioa eta posta hilara ezabatu\n"
#, fuzzy
#| msgid ""
#| " -Z, --selinux-user new SELinux user mapping for the user "
#| "account\n"
msgid ""
" -Z, --selinux-user remove any SELinux user mapping for the "
"user\n"
@@ -2300,7 +2228,6 @@ msgstr ""
"erabiltzailearen kontuarentzat\n"
#, fuzzy, c-format
#| msgid "%s: cannot remove the primary group of user '%s'\n"
msgid ""
"%s: group %s not removed because it is not the primary group of user %s.\n"
msgstr "%s: Ezin da '%s' erabiltzailearen talde nagusia kendu\n"
@@ -2316,12 +2243,10 @@ msgstr ""
"da.\n"
#, fuzzy, c-format
#| msgid "%s: cannot remove entry '%s' from %s\n"
msgid "%s: cannot remove entry %lu from %s\n"
msgstr "%s: ezin da '%s' sarrera %s-tik kendu\n"
#, fuzzy, c-format
#| msgid "%s: %s home directory (%s) not found\n"
msgid "%s: %s mail spool (%s) not found\n"
msgstr "%s: %s etxe-direktorioa (%s) ez dago\n"
@@ -2338,17 +2263,14 @@ msgid "%s: Can't allocate memory, tcb entry for %s not removed.\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: failed to drop privileges (%s)\n"
msgid "%s: Cannot drop privileges: %s\n"
msgstr "%s: huts baimenak kentzerakoan (%s)\n"
#, fuzzy, c-format
#| msgid "lastlog: Cannot get the size of %s: %s\n"
msgid "%s: Cannot remove the content of %s: %s\n"
msgstr "lastlog: Ezinda %s-ren tamaina eskuratu: %s\n"
#, fuzzy, c-format
#| msgid "%s: cannot remove entry '%s' from %s\n"
msgid "%s: Cannot remove tcb files for %s: %s\n"
msgstr "%s: ezin da '%s' sarrera %s-tik kendu\n"
@@ -2369,7 +2291,6 @@ msgid "%s: error removing directory %s\n"
msgstr "%s: errorea %s direktorioa ezabatzean\n"
#, fuzzy, c-format
#| msgid "%s: warning: the user name %s to %s SELinux user mapping failed.\n"
msgid "%s: warning: the user name %s to SELinux user mapping removal failed.\n"
msgstr ""
"%s: abisua: %s erabiltzaile izena %s SELinux erabiltzailera mapatzean huts "
@@ -2408,7 +2329,7 @@ msgstr ""
msgid ""
" -a, --append append the user to the supplemental GROUPS\n"
" mentioned by the -G option without removing\n"
" him/her from other groups\n"
" the user from other groups\n"
msgstr ""
" -a, --append gehitu erabiltzailea -G aukerak zehaztutako "
"talde\n"
@@ -2458,9 +2379,6 @@ msgid " -W, --del-subgids FIRST-LAST remove range of subordinate gids\n"
msgstr ""
#, fuzzy
#| msgid ""
#| " -Z, --selinux-user new SELinux user mapping for the user "
#| "account\n"
msgid ""
" -Z, --selinux-user SEUSER new SELinux user mapping for the user "
"account\n"
@@ -2483,17 +2401,14 @@ msgid "%s: user '%s' already exists in %s\n"
msgstr "%s: '%s' erabiltzailea badago dagoeneko %s-n\n"
#, fuzzy, c-format
#| msgid "%s: invalid date '%s'\n"
msgid "%s: invalid subordinate uid range '%s'\n"
msgstr "%s: '%s' data baliogabea\n"
#, fuzzy, c-format
#| msgid "%s: invalid date '%s'\n"
msgid "%s: invalid subordinate gid range '%s'\n"
msgstr "%s: '%s' data baliogabea\n"
#, fuzzy, c-format
#| msgid "%s: cannot open %s\n"
msgid "%s: no options\n"
msgstr "%s: ezin da %s ireki\n"
@@ -2510,7 +2425,6 @@ msgid "%s: UID '%lu' already exists\n"
msgstr "%s: '%lu' UIDa badago dagoeneko\n"
#, fuzzy, c-format
#| msgid "%s: %s is not authorized to change the password of %s\n"
msgid "%s: %s does not exist, you cannot use the flags %s or %s\n"
msgstr "%s: %s ez dago %s-ren pasahitza aldatzeko baimendurik\n"
@@ -2525,7 +2439,6 @@ msgid ""
msgstr ""
#, fuzzy, c-format
#| msgid "%s: cannot create directory %s\n"
msgid "%s: Failed to change ownership of the home directory"
msgstr "%s: ezin da %s direktorioa sortu\n"
@@ -2560,22 +2473,18 @@ msgid "failed to rename mailbox"
msgstr "huts egin du postontzia izenez aldatzean"
#, fuzzy, c-format
#| msgid "%s: failed to prepare the new %s entry '%s'\n"
msgid "%s: failed to remove uid range %lu-%lu from '%s'\n"
msgstr "%s: huts %s sarrera berria prestatzean '%s'\n"
#, fuzzy, c-format
#| msgid "%s: failed to prepare the new %s entry '%s'\n"
msgid "%s: failed to add uid range %lu-%lu from '%s'\n"
msgstr "%s: huts %s sarrera berria prestatzean '%s'\n"
#, fuzzy, c-format
#| msgid "%s: failed to prepare the new %s entry '%s'\n"
msgid "%s: failed to remove gid range %lu-%lu from '%s'\n"
msgstr "%s: huts %s sarrera berria prestatzean '%s'\n"
#, fuzzy, c-format
#| msgid "%s: failed to prepare the new %s entry '%s'\n"
msgid "%s: failed to add gid range %lu-%lu from '%s'\n"
msgstr "%s: huts %s sarrera berria prestatzean '%s'\n"
@@ -2610,7 +2519,6 @@ msgid "%s: %s is unchanged\n"
msgstr "%s: %s ez da aldatu\n"
#, fuzzy
#| msgid "failed to rename mailbox"
msgid "failed to create scratch directory"
msgstr "huts egin du postontzia izenez aldatzean"
@@ -2624,7 +2532,6 @@ msgid "setfscreatecon () failed"
msgstr "setfscreatecon () -ek huts egin du"
#, fuzzy
#| msgid "%s: failed to drop privileges (%s)\n"
msgid "failed to gain privileges"
msgstr "%s: huts baimenak kentzerakoan (%s)\n"
@@ -2635,7 +2542,6 @@ msgid "Couldn't make backup"
msgstr "Ezin izan da babeskopiarik egin"
#, fuzzy, c-format
#| msgid "%s: PAM: %s\n"
msgid "%s: %s: %s\n"
msgstr "%s: PAM: %s\n"
@@ -2648,27 +2554,22 @@ msgid "%s: %s killed by signal %d\n"
msgstr ""
#, fuzzy
#| msgid "failed to rename mailbox"
msgid "failed to open scratch file"
msgstr "huts egin du postontzia izenez aldatzean"
#, fuzzy
#| msgid "%s: failed to unlock %s\n"
msgid "failed to unlink scratch file"
msgstr "%s: huts %s desblokeatzean\n"
#, fuzzy
#| msgid "failed to rename mailbox"
msgid "failed to stat edited file"
msgstr "huts egin du postontzia izenez aldatzean"
#, fuzzy
#| msgid "failed to change mailbox owner"
msgid "failed to allocate memory"
msgstr "huts egin du postontzia jabez aldatzean"
#, fuzzy
#| msgid "failed to rename mailbox"
msgid "failed to create backup file"
msgstr "huts egin du postontzia izenez aldatzean"
@@ -2677,7 +2578,6 @@ msgid "%s: can't restore %s: %s (your changes are in %s)\n"
msgstr "%s: ezin da %s leheneratu: %s (zure aldaketak %s(e)n daude)\n"
#, fuzzy, c-format
#| msgid "%s: invalid base directory '%s'\n"
msgid "%s: failed to find tcb directory for %s\n"
msgstr "%s: oinarrizko '%s' direktorio baliogabea\n"
@@ -2962,7 +2862,7 @@ msgstr "%s: oinarrizko '%s' direktorio baliogabea\n"
#~ "GROUPS\n"
#~ " mentioned by the -G option without "
#~ "removing\n"
#~ " him/her from other groups\n"
#~ " the user from other groups\n"
#~ " -h, --help display this help message and exit\n"
#~ " -l, --login NEW_LOGIN new value of the login name\n"
#~ " -L, --lock lock the user account\n"

157
po/fi.po
View File

@@ -84,7 +84,6 @@ msgid "Could not set serange for %s\n"
msgstr ""
#, fuzzy, c-format
#| msgid "Could not allocate space for config info.\n"
msgid "Could not set sename for %s\n"
msgstr "Asetustiedoille ei voi varata tilaa.\n"
@@ -93,7 +92,6 @@ msgid "Could not modify login mapping for %s\n"
msgstr ""
#, fuzzy, c-format
#| msgid "Changing the aging information for %s\n"
msgid "Cannot create SELinux login mapping for %s\n"
msgstr "Muutetaan käyttäjän %s vanhenemistietoja\n"
@@ -114,12 +112,10 @@ msgid "Cannot init SELinux management\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: Cannot determine your user name.\n"
msgid "Cannot create SELinux user key\n"
msgstr "%s: Käyttäjätunnusta ei voi selvittää.\n"
#, fuzzy, c-format
#| msgid "%s: line %d: cannot find user %s\n"
msgid "Cannot verify the SELinux user\n"
msgstr "%s: rivi %d: käyttäjää %s ei löydy\n"
@@ -152,17 +148,14 @@ msgid "%s: out of memory\n"
msgstr "%s: muisti loppui\n"
#, fuzzy, c-format
#| msgid "%s: cannot update file %s\n"
msgid "%s: Cannot stat %s: %s\n"
msgstr "%s: tiedostoa %s ei voi päivittää\n"
#, fuzzy, c-format
#| msgid "%s: invalid home directory '%s'\n"
msgid "%s: %s is neither a directory, nor a symlink.\n"
msgstr "%s: virheellinen kotihakemisto \"%s\"\n"
#, fuzzy, c-format
#| msgid "%s: cannot rename directory %s to %s\n"
msgid "%s: Cannot read symbolic link %s: %s\n"
msgstr "%s: hakemistoa %s ei voi uudelleennimetä hakemistoksi %s\n"
@@ -171,58 +164,47 @@ msgid "%s: Suspiciously long symlink: %s\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: cannot create directory %s\n"
msgid "%s: Cannot create directory %s: %s\n"
msgstr "%s: hakemistoa %s ei voi luoda\n"
#, fuzzy, c-format
#| msgid "%s: warning: can't remove "
msgid "%s: Cannot change owner of %s: %s\n"
msgstr "%s: varoitus: ei voi poistaa tiedostoa "
#, fuzzy, c-format
#| msgid "%s: warning: can't remove "
msgid "%s: Cannot change mode of %s: %s\n"
msgstr "%s: varoitus: ei voi poistaa tiedostoa "
# Kannattaako tuota kääntää, siinä viitataan rename()-funktioon...
#, fuzzy, c-format
#| msgid "%s: rename: %s"
msgid "%s: unlink: %s: %s\n"
msgstr "%s: rename: %s"
#, fuzzy, c-format
#| msgid "%s: cannot rename directory %s to %s\n"
msgid "%s: Cannot remove directory %s: %s\n"
msgstr "%s: hakemistoa %s ei voi uudelleennimetä hakemistoksi %s\n"
#, fuzzy, c-format
#| msgid "%s: cannot rename directory %s to %s\n"
msgid "%s: Cannot rename %s to %s: %s\n"
msgstr "%s: hakemistoa %s ei voi uudelleennimetä hakemistoksi %s\n"
#, fuzzy, c-format
#| msgid "%s: warning: can't remove "
msgid "%s: Cannot remove %s: %s\n"
msgstr "%s: varoitus: ei voi poistaa tiedostoa "
#, fuzzy, c-format
#| msgid "%s: cannot create directory %s\n"
msgid "%s: Cannot create symbolic link %s: %s\n"
msgstr "%s: hakemistoa %s ei voi luoda\n"
#, fuzzy, c-format
#| msgid "%s: warning: can't remove "
msgid "%s: Cannot change owners of %s: %s\n"
msgstr "%s: varoitus: ei voi poistaa tiedostoa "
#, fuzzy, c-format
#| msgid "%s: cannot update file %s\n"
msgid "%s: Cannot lstat %s: %s\n"
msgstr "%s: tiedostoa %s ei voi päivittää\n"
#, fuzzy, c-format
#| msgid "%s: can't update shadow file\n"
msgid "%s: Warning, user %s has no tcb shadow file.\n"
msgstr "%s: varjotiedostoa ei voi päivittää\n"
@@ -234,12 +216,10 @@ msgstr ""
# Kannattaako tuota kääntää, siinä viitataan rename()-funktioon...
#, fuzzy, c-format
#| msgid "%s: rename: %s"
msgid "%s: mkdir: %s: %s\n"
msgstr "%s: rename: %s"
#, fuzzy, c-format
#| msgid "%s: cannot open file %s\n"
msgid "%s: Cannot open %s: %s\n"
msgstr "%s: tiedostoa %s ei voi lukita\n"
@@ -282,17 +262,14 @@ msgid "Cannot open audit interface - aborting.\n"
msgstr ""
#, fuzzy, c-format
#| msgid "Unable to change tty %s"
msgid "Unable to change owner or mode of tty stdin: %s"
msgstr "Päätettä %s ei voi vaihtaa"
#, fuzzy, c-format
#| msgid "%s: fields too long\n"
msgid "%s: failed to unlock %s\n"
msgstr "%s: kentät liian pitkiä\n"
#, fuzzy, c-format
#| msgid "%s: %s\n"
msgid "%s: "
msgstr "%s: %s\n"
@@ -331,7 +308,6 @@ msgid ""
msgstr ""
#, fuzzy, c-format
#| msgid "failed to change mailbox owner"
msgid "%s: failed to allocate memory: %s\n"
msgstr "postilaatikon omistajan vaihtaminen epäonnistui"
@@ -407,7 +383,6 @@ msgid "passwd: %s\n"
msgstr "passwd: %s\n"
#, fuzzy
#| msgid "Password changed."
msgid "passwd: password unchanged\n"
msgstr "Salasana vaihdettu."
@@ -431,22 +406,18 @@ msgid "%s: failed to drop privileges (%s)\n"
msgstr "%s: Oikeuksien pudottaminen epäonnistui (%s)\n"
#, fuzzy, c-format
#| msgid "%s: invalid home phone: '%s'\n"
msgid "%s: invalid chroot path '%s'\n"
msgstr "%s: virheellinen kotipuhelin: \"%s\"\n"
#, fuzzy, c-format
#| msgid "%s: cannot create directory %s\n"
msgid "%s: cannot access chroot directory %s: %s\n"
msgstr "%s: hakemistoa %s ei voi luoda\n"
#, fuzzy, c-format
#| msgid "%s: cannot create directory %s\n"
msgid "%s: cannot chdir to chroot directory %s: %s\n"
msgstr "%s: hakemistoa %s ei voi luoda\n"
#, fuzzy, c-format
#| msgid "%s: cannot create directory %s\n"
msgid "%s: unable to chroot to directory %s: %s\n"
msgstr "%s: hakemistoa %s ei voi luoda\n"
@@ -479,12 +450,10 @@ msgid "Unable to determine your tty name."
msgstr "Tty-päätteesi nimeä ei voi selvittää."
#, fuzzy
#| msgid "No\n"
msgid "No"
msgstr "Ei\n"
#, fuzzy, c-format
#| msgid "Usage: %s [input]\n"
msgid ""
"Usage: %s [options] LOGIN\n"
"\n"
@@ -517,7 +486,7 @@ msgid ""
msgstr ""
msgid ""
" -M, --maxdays MAX_DAYS set maximim number of days before password\n"
" -M, --maxdays MAX_DAYS set maximum number of days before password\n"
" change to MAX_DAYS\n"
msgstr ""
@@ -600,17 +569,14 @@ msgid "%s: Cannot determine your user name.\n"
msgstr "%s: Käyttäjätunnusta ei voi selvittää.\n"
#, fuzzy, c-format
#| msgid "%s: %s\n"
msgid "%s: PAM: %s\n"
msgstr "%s: %s\n"
#, fuzzy, c-format
#| msgid "%s: can't lock files, try again later\n"
msgid "%s: cannot lock %s; try again later.\n"
msgstr "%s: tiedostoja ei voi lukita, yritä myöhemmin uudelleen\n"
#, fuzzy, c-format
#| msgid "%s: cannot open file %s\n"
msgid "%s: cannot open %s\n"
msgstr "%s: tiedostoa %s ei voi lukita\n"
@@ -619,7 +585,6 @@ msgid "%s: failure while writing changes to %s\n"
msgstr "%s: fork-kutsu epäonnistui: %s"
#, fuzzy, c-format
#| msgid "%s: failed to drop privileges (%s)\n"
msgid "%s: failed to prepare the new %s entry '%s'\n"
msgstr "%s: Oikeuksien pudottaminen epäonnistui (%s)\n"
@@ -640,7 +605,6 @@ msgid "%s: error changing fields\n"
msgstr "%s: virhe muutettaessa kenttiä\n"
#, fuzzy, c-format
#| msgid "Usage: %s [input]\n"
msgid ""
"Usage: %s [options] [LOGIN]\n"
"\n"
@@ -669,7 +633,6 @@ msgid "Full Name"
msgstr "Koko nimi"
#, fuzzy, c-format
#| msgid "%s: %s\n"
msgid "\t%s: %s\n"
msgstr "%s: %s\n"
@@ -713,7 +676,6 @@ msgid "%s: invalid home phone: '%s'\n"
msgstr "%s: virheellinen kotipuhelin: \"%s\"\n"
#, fuzzy, c-format
#| msgid "%s: '%s' contains illegal characters\n"
msgid "%s: '%s' contains non-ASCII characters\n"
msgstr "%s: \"%s\" sisältää ei-sallittuja merkkejä\n"
@@ -742,7 +704,6 @@ msgid "%s: fields too long\n"
msgstr "%s: kentät liian pitkiä\n"
#, fuzzy, c-format
#| msgid "Usage: %s [input]\n"
msgid ""
"Usage: %s [options]\n"
"\n"
@@ -787,17 +748,14 @@ msgid "%s: line %d: missing new password\n"
msgstr "%s: rivi %d: uusi salasana puuttuu\n"
#, fuzzy, c-format
#| msgid "%s: failed to drop privileges (%s)\n"
msgid "%s: failed to crypt password with salt '%s': %s\n"
msgstr "%s: Oikeuksien pudottaminen epäonnistui (%s)\n"
#, fuzzy, c-format
#| msgid "%s: group %s does not exist\n"
msgid "%s: line %d: group '%s' does not exist\n"
msgstr "%s: ryhmää %s ei ole olemassa\n"
#, fuzzy, c-format
#| msgid "%s: line %d: can't update entry\n"
msgid "%s: line %d: failed to prepare the new %s entry '%s'\n"
msgstr "%s: rivi %d: tietuetta ei voi päivittää\n"
@@ -820,7 +778,6 @@ msgid "Login Shell"
msgstr "Sisäänkirjautumiskuori"
#, fuzzy, c-format
#| msgid "You may not change the shell for %s.\n"
msgid "You may not change the shell for '%s'.\n"
msgstr "Et voi muuttaa käyttäjän %s kuorta.\n"
@@ -833,17 +790,14 @@ msgid "%s: Invalid entry: %s\n"
msgstr "%s: Virheellinen tietue: %s\n"
#, fuzzy, c-format
#| msgid "%s is an invalid shell.\n"
msgid "%s: %s is an invalid shell\n"
msgstr "%s on virheellinen kuori.\n"
#, fuzzy, c-format
#| msgid "%s: user %s does not exist\n"
msgid "%s: Warning: %s does not exist\n"
msgstr "%s: käyttäjää %s ei ole olemassa\n"
#, fuzzy, c-format
#| msgid "%s: warning: %s not owned by %s\n"
msgid "%s: Warning: %s is not executable\n"
msgstr "%s: varoitus: tiedoston %s omistaja ei ole %s\n"
@@ -861,7 +815,6 @@ msgid "%s: options %s and %s conflict\n"
msgstr ""
#, fuzzy, c-format
#| msgid "lastlog: unexpected argument: %s\n"
msgid "%s: unexpected argument: %s\n"
msgstr "lastlog: odottamaton argumentti: %s\n"
@@ -892,7 +845,6 @@ msgid ""
msgstr ""
#, fuzzy, c-format
#| msgid "%s: cannot create directory %s\n"
msgid "%s: Failed to get the entry for UID %lu\n"
msgstr "%s: hakemistoa %s ei voi luoda\n"
@@ -900,7 +852,6 @@ msgid "Login Failures Maximum Latest On\n"
msgstr "Tunnus Epäonn. Enint. Edellinen Päätteellä\n"
#, fuzzy, c-format
#| msgid " [%lds left]"
msgid " [%lus left]"
msgstr " [%lds jäljellä]"
@@ -909,17 +860,14 @@ msgid " [%lds lock]"
msgstr " [%lds lukittu]"
#, fuzzy, c-format
#| msgid "%s: cannot create directory %s\n"
msgid "%s: Failed to reset fail count for UID %lu\n"
msgstr "%s: hakemistoa %s ei voi luoda\n"
#, fuzzy, c-format
#| msgid "%s: failed to drop privileges (%s)\n"
msgid "%s: Failed to set max for UID %lu\n"
msgstr "%s: Oikeuksien pudottaminen epäonnistui (%s)\n"
#, fuzzy, c-format
#| msgid "%s: cannot create directory %s\n"
msgid "%s: Failed to set locktime for UID %lu\n"
msgstr "%s: hakemistoa %s ei voi luoda\n"
@@ -928,17 +876,14 @@ msgid "%s: Unknown user or range: %s\n"
msgstr "Tuntematon käyttäjä: %s\n"
#, fuzzy, c-format
#| msgid "%s: cannot rename directory %s to %s\n"
msgid "%s: Cannot get the size of %s: %s\n"
msgstr "%s: hakemistoa %s ei voi uudelleennimetä hakemistoksi %s\n"
#, fuzzy, c-format
#| msgid "%s: failed to drop privileges (%s)\n"
msgid "%s: Failed to write %s: %s\n"
msgstr "%s: Oikeuksien pudottaminen epäonnistui (%s)\n"
#, fuzzy, c-format
#| msgid "Usage: %s [input]\n"
msgid ""
"Usage: %s [option] GROUP\n"
"\n"
@@ -970,12 +915,10 @@ msgid ""
msgstr ""
#, fuzzy
#| msgid "The password for %s cannot be changed.\n"
msgid "Except for the -A and -M options, the options cannot be combined.\n"
msgstr "Käyttäjän %s salasanaa ei voi vaihtaa.\n"
#, fuzzy
#| msgid "The password for %s cannot be changed.\n"
msgid "The options cannot be combined.\n"
msgstr "Käyttäjän %s salasanaa ei voi vaihtaa.\n"
@@ -984,7 +927,6 @@ msgid "%s: shadow group passwords required for -A\n"
msgstr "%s: varjoryhmäsalanat vaaditaan valitsimelle -A\n"
#, fuzzy, c-format
#| msgid "%s: group %s does not exist\n"
msgid "%s: group '%s' does not exist in %s\n"
msgstr "%s: ryhmää %s ei ole olemassa\n"
@@ -1026,7 +968,6 @@ msgid "%s: Not a tty\n"
msgstr "%s: Ei ole pääte\n"
#, fuzzy, c-format
#| msgid "Usage: %s [input]\n"
msgid ""
"Usage: %s [options] GROUP\n"
"\n"
@@ -1059,7 +1000,6 @@ msgid " -r, --system create a system account\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: %s is not a valid group name\n"
msgid "%s: '%s' is not a valid group name\n"
msgstr "%s: %s ei ole kelpo ryhmänimi\n"
@@ -1072,17 +1012,14 @@ msgid "%s: -K requires KEY=VALUE\n"
msgstr "%s: -K vaatii AVAIN=ARVO\n"
#, fuzzy, c-format
#| msgid "%s: group %s exists\n"
msgid "%s: group '%s' already exists\n"
msgstr "%s: ryhmä %s on olemassa\n"
#, fuzzy, c-format
#| msgid "Member already exists\n"
msgid "%s: GID '%lu' already exists\n"
msgstr "Jäsen on jo olemassa\n"
#, fuzzy, c-format
#| msgid "%s: Cannot determine your user name.\n"
msgid "%s: Cannot setup cleanup service.\n"
msgstr "%s: Käyttäjätunnusta ei voi selvittää.\n"
@@ -1092,7 +1029,6 @@ msgid ""
msgstr ""
#, fuzzy, c-format
#| msgid "%s: cannot rename directory %s to %s\n"
msgid "%s: cannot remove entry '%s' from %s\n"
msgstr "%s: hakemistoa %s ei voi uudelleennimetä hakemistoksi %s\n"
@@ -1101,12 +1037,10 @@ msgid "%s: cannot remove the primary group of user '%s'\n"
msgstr "%s: ei voi vaihtaa käyttäjää \"%s\" NIS-asiakkaalla.\n"
#, fuzzy, c-format
#| msgid "%s: group %s does not exist\n"
msgid "%s: group '%s' does not exist\n"
msgstr "%s: ryhmää %s ei ole olemassa\n"
#, fuzzy, c-format
#| msgid "%s: group '%s' is a NIS group.\n"
msgid "%s: group '%s' is a NIS group\n"
msgstr "%s: ryhmä \"%s\" on NIS-ryhmä.\n"
@@ -1115,7 +1049,6 @@ msgid "%s: %s is the NIS master\n"
msgstr "%s: isäntä %s on NIS-palvelin\n"
#, fuzzy, c-format
#| msgid "%s: user %s is a NIS user\n"
msgid "%s: user '%s' is already a member of '%s'\n"
msgstr "%s: käyttäjä %s on NIS-käyttäjä\n"
@@ -1124,7 +1057,6 @@ msgid "%s: Out of memory. Cannot update %s.\n"
msgstr "%s: muisti loppui funktiossa update_group\n"
#, fuzzy, c-format
#| msgid "Usage: %s [input]\n"
msgid ""
"Usage: %s [options] [action]\n"
"\n"
@@ -1194,7 +1126,6 @@ msgid "%s: unknown user %s\n"
msgstr "%s: Tuntematon käyttäjä %s\n"
#, fuzzy, c-format
#| msgid "Usage: %s [input]\n"
msgid ""
"Usage: %s [options] [group [gshadow]]\n"
"\n"
@@ -1202,7 +1133,6 @@ msgid ""
msgstr "Käyttö: %s [syöte]\n"
#, fuzzy, c-format
#| msgid "Usage: %s [input]\n"
msgid ""
"Usage: %s [options] [group]\n"
"\n"
@@ -1218,7 +1148,6 @@ msgid " -s, --sort sort entries by UID\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: -s and -r are incompatibile\n"
msgid "%s: -s and -r are incompatible\n"
msgstr "%s: valitsimet -s ja -r eivät sovi yhteen\n"
@@ -1237,7 +1166,6 @@ msgid "invalid group name '%s'\n"
msgstr "virheellinen ryhmänimi \"%s\"\n"
#, fuzzy, c-format
#| msgid "invalid group name '%s'\n"
msgid "invalid group ID '%lu'\n"
msgstr "virheellinen ryhmänimi \"%s\"\n"
@@ -1254,7 +1182,6 @@ msgid "no matching group file entry in %s\n"
msgstr "ei täsmäävää ryhmätiedostotietuetta tiedostossa %s\n"
#, fuzzy, c-format
#| msgid "add group '%s' in %s ?"
msgid "add group '%s' in %s? "
msgstr "lisää ryhmä \"%s\" tiedostoon %s?"
@@ -1290,7 +1217,6 @@ msgid "%s: no changes\n"
msgstr "%s: ei muutoksia\n"
#, fuzzy, c-format
#| msgid "%s: cannot update file %s\n"
msgid "%s: cannot delete %s\n"
msgstr "%s: tiedostoa %s ei voi päivittää\n"
@@ -1336,12 +1262,10 @@ msgid "**Never logged in**"
msgstr "**Ei koskaan kirjautunut sisään**"
#, fuzzy, c-format
#| msgid "%s: cannot create directory %s\n"
msgid "%s: Failed to update the entry for UID %lu\n"
msgstr "%s: hakemistoa %s ei voi luoda\n"
#, fuzzy, c-format
#| msgid "%s: can't update password file\n"
msgid "%s: Failed to update the lastlog file\n"
msgstr "%s: salasanatiedostoa ei voi päivittää\n"
@@ -1394,9 +1318,6 @@ msgid "No utmp entry. You must exec \"login\" from the lowest level \"sh\""
msgstr "Ei utmp-tietuetta. Suorita \"login\" alimman tason kuoresta"
#, fuzzy, c-format
#| msgid ""
#| "\n"
#| "Login timed out after %d seconds.\n"
msgid ""
"\n"
"Login timed out after %u seconds.\n"
@@ -1416,7 +1337,6 @@ msgid "login: "
msgstr "tunnus: "
#, fuzzy, c-format
#| msgid "Maximum number of tries exceeded (%d)\n"
msgid "Maximum number of tries exceeded (%u)\n"
msgstr "Suurin sallittu määrä yrityksiä ylitetty (%d)\n"
@@ -1427,7 +1347,6 @@ msgid "Login incorrect"
msgstr "Sisäänkirjautuminen epäonnistui"
#, fuzzy, c-format
#| msgid "%s: line %d: cannot find user %s\n"
msgid "Cannot find user (%s)\n"
msgstr "%s: rivi %d: käyttäjää %s ei löydy\n"
@@ -1471,7 +1390,6 @@ msgstr ""
"\n"
#, fuzzy
#| msgid "Usage: id\n"
msgid "Usage: logoutd\n"
msgstr "Käyttö: id\n"
@@ -1482,7 +1400,6 @@ msgid "Usage: sg group [[-c] command]\n"
msgstr "Käyttö: sg ryhmä [[-c] komento]\n"
#, fuzzy, c-format
#| msgid "%s: failed to drop privileges (%s)\n"
msgid "%s: failed to crypt password with previous salt: %s\n"
msgstr "%s: Oikeuksien pudottaminen epäonnistui (%s)\n"
@@ -1509,7 +1426,6 @@ msgid "%s: group '%s' is a shadow group, but does not exist in /etc/group\n"
msgstr "%s: ryhmää %s ei ole olemassa\n"
#, fuzzy, c-format
#| msgid "%s: invalid user name '%s'\n"
msgid "%s: invalid user ID '%s'\n"
msgstr "%s: virheellinen käyttäjätunnus \"%s\"\n"
@@ -1542,12 +1458,10 @@ msgid "%s: line %d: can't update password\n"
msgstr "%s: rivi %d: salasanaa ei voi päivittää\n"
#, fuzzy, c-format
#| msgid "%s: line %d: mkdir failed\n"
msgid "%s: line %d: mkdir %s failed: %s\n"
msgstr "%s: rivi %d: mkdir epäonnistui\n"
#, fuzzy, c-format
#| msgid "%s: line %d: chown failed\n"
msgid "%s: line %d: chown %s failed: %s\n"
msgstr "%s: rivi %d: chown epäonnistui\n"
@@ -1556,7 +1470,6 @@ msgid "%s: line %d: can't update entry\n"
msgstr "%s: rivi %d: tietuetta ei voi päivittää\n"
#, fuzzy, c-format
#| msgid "%s: failed to drop privileges (%s)\n"
msgid "%s: failed to prepare new %s entry\n"
msgstr "%s: Oikeuksien pudottaminen epäonnistui (%s)\n"
@@ -1565,7 +1478,6 @@ msgid "%s: can't find subordinate user range\n"
msgstr "%s: tiedostoa %s ei voi luoda\n"
#, fuzzy, c-format
#| msgid "%s: can't update group file\n"
msgid "%s: can't find subordinate group range\n"
msgstr "%s: ryhmätiedostoa ei voi päivittää\n"
@@ -1694,17 +1606,14 @@ msgid "The password for %s is unchanged.\n"
msgstr "Käyttäjän %s salasanaa ei vaihdettu.\n"
#, fuzzy, c-format
#| msgid "Password changed."
msgid "%s: password changed.\n"
msgstr "Salasana vaihdettu."
#, fuzzy, c-format
#| msgid "Password Expiration Warning"
msgid "%s: password expiry information changed.\n"
msgstr "Salasanan vanhenemisvaroitus"
#, fuzzy, c-format
#| msgid "Usage: %s [input]\n"
msgid ""
"Usage: %s [options] [passwd]\n"
"\n"
@@ -1712,7 +1621,6 @@ msgid ""
msgstr "Käyttö: %s [syöte]\n"
#, fuzzy, c-format
#| msgid "Usage: %s [input]\n"
msgid ""
"Usage: %s [options] [passwd [shadow]]\n"
"\n"
@@ -1737,42 +1645,34 @@ msgid "invalid user name '%s'\n"
msgstr "virheellinen käyttäjätunnus \"%s\"\n"
#, fuzzy, c-format
#| msgid "invalid user name '%s'\n"
msgid "invalid user ID '%lu'\n"
msgstr "virheellinen käyttäjätunnus \"%s\"\n"
#, fuzzy, c-format
#| msgid "user %s: no group %u\n"
msgid "user '%s': no group %lu\n"
msgstr "käyttäjä %s: ei ryhmää %u\n"
#, fuzzy, c-format
#| msgid "user %s: directory %s does not exist\n"
msgid "user '%s': directory '%s' does not exist\n"
msgstr "käyttäjä %s: hakemistoa %s ei ole olemassa\n"
#, fuzzy, c-format
#| msgid "user %s: program %s does not exist\n"
msgid "user '%s': program '%s' does not exist\n"
msgstr "käyttäjä %s: kuorta %s ei ole olemassa\n"
#, fuzzy, c-format
#| msgid "%s: cannot create directory %s\n"
msgid "no tcb directory for %s\n"
msgstr "%s: hakemistoa %s ei voi luoda\n"
#, fuzzy, c-format
#| msgid "%s: cannot create directory %s\n"
msgid "create tcb directory for %s?"
msgstr "%s: hakemistoa %s ei voi luoda\n"
#, fuzzy, c-format
#| msgid "%s: cannot create directory %s\n"
msgid "failed to create tcb directory for %s\n"
msgstr "%s: hakemistoa %s ei voi luoda\n"
#, fuzzy, c-format
#| msgid "%s: cannot lock file %s\n"
msgid "%s: cannot lock %s.\n"
msgstr "%s: tiedostoa %s ei voi lukita\n"
@@ -1800,12 +1700,10 @@ msgid "user %s: last password change in the future\n"
msgstr "käyttäjä %s: viimeisin salasanan vaihto tapahtunut tulevaisuudessa\n"
#, fuzzy, c-format
#| msgid "%s: cannot open file %s\n"
msgid "%s: cannot sort entries in %s\n"
msgstr "%s: tiedostoa %s ei voi lukita\n"
#, fuzzy, c-format
#| msgid "%s: can't re-write file\n"
msgid "%s: can't work with tcb enabled\n"
msgstr "%s: tiedostoa ei voi uudelleenkirjoittaa\n"
@@ -1823,7 +1721,6 @@ msgid "Please enter your OWN password as authentication.\n"
msgstr "Syötä OMA salasanasi todennukseksi.\n"
#, fuzzy, c-format
#| msgid "%s: cannot lock file %s\n"
msgid "%s: Cannot fork user shell\n"
msgstr "%s: tiedostoa %s ei voi lukita\n"
@@ -1893,17 +1790,14 @@ msgid "(Enter your own password)"
msgstr "(Syötä oma salasanasi)"
#, fuzzy, c-format
#| msgid "%s: PAM authentication failed\n"
msgid "%s: Authentication failure\n"
msgstr "%s: PAM-todennus epäonnistui\n"
#, fuzzy, c-format
#| msgid "You are not authorized to su %s\n"
msgid "%s: You are not authorized to su at that time\n"
msgstr "Sinulla ei ole lupaa asettua käyttäjäksi %s\n"
#, fuzzy, c-format
#| msgid "No password entry for 'root'"
msgid "No passwd entry for user '%s'\n"
msgstr "Ei salasanatietuetta pääkäyttäjälle (\"root\")"
@@ -1916,12 +1810,10 @@ msgid "%s: pam_start: error %d\n"
msgstr "%s: pam_start: virhe %d\n"
#, fuzzy, c-format
#| msgid "%s: cannot rename directory %s to %s\n"
msgid "%s: Cannot drop the controlling terminal\n"
msgstr "%s: hakemistoa %s ei voi uudelleennimetä hakemistoksi %s\n"
#, fuzzy, c-format
#| msgid "Cannot execute %s"
msgid "Cannot execute %s\n"
msgstr "Ei voi suorittaa %s"
@@ -1963,18 +1855,15 @@ msgid "%s: cannot open new defaults file\n"
msgstr "%s: uutta defaults-tiedostoa ei voi avata\n"
#, fuzzy, c-format
#| msgid "%s: line %d: chown failed\n"
msgid "%s: line too long in %s: %s..."
msgstr "%s: rivi %d: chown epäonnistui\n"
#, fuzzy, c-format
#| msgid "%s: cannot create directory %s\n"
msgid "%s: Cannot create backup file (%s): %s\n"
msgstr "%s: hakemistoa %s ei voi luoda\n"
# Kannattaako tuota kääntää, siinä viitataan rename()-funktioon...
#, fuzzy, c-format
#| msgid "%s: rename: %s"
msgid "%s: rename: %s: %s\n"
msgstr "%s: rename: %s"
@@ -1987,7 +1876,6 @@ msgid "%s: too many groups specified (max %d).\n"
msgstr "%s: liian monta ryhmää määritelty (korkeintaan %d).\n"
#, fuzzy, c-format
#| msgid "Usage: %s [input]\n"
msgid ""
"Usage: %s [options] LOGIN\n"
" %s -D\n"
@@ -2117,7 +2005,6 @@ msgid "%s: failed to reset the lastlog entry of UID %lu: %s\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: failed to drop privileges (%s)\n"
msgid "%s: failed to prepare the new %s entry\n"
msgstr "%s: Oikeuksien pudottaminen epäonnistui (%s)\n"
@@ -2138,7 +2025,6 @@ msgid "Setting mailbox file permissions"
msgstr "Asetetaan postilaatikkotiedoston oikeudet"
#, fuzzy, c-format
#| msgid "%s: user %s exists\n"
msgid "%s: user '%s' already exists\n"
msgstr "%s: käyttäjä %s on olemassa\n"
@@ -2154,12 +2040,10 @@ msgid "%s: can't create user\n"
msgstr "%s: tiedostoa %s ei voi luoda\n"
#, fuzzy, c-format
#| msgid "%s: UID %u is not unique\n"
msgid "%s: UID %lu is not unique\n"
msgstr "%s: UID %u ei ole ainutkertainen\n"
#, fuzzy, c-format
#| msgid "%s: cannot create directory %s\n"
msgid "%s: Failed to create tcb directory for %s\n"
msgstr "%s: hakemistoa %s ei voi luoda\n"
@@ -2210,25 +2094,20 @@ msgid "%s: group %s not removed because it has other members.\n"
msgstr ""
#, fuzzy, c-format
#| msgid ""
#| "%s: Cannot remove group %s which is a primary group for another user.\n"
msgid "%s: group %s is the primary group of another user and is not removed.\n"
msgstr ""
"%s: Ryhmää %s ei voi poistaa, koska se on toisen käyttäjän ensisijainen "
"ryhmä.\n"
#, fuzzy, c-format
#| msgid "%s: cannot rename directory %s to %s\n"
msgid "%s: cannot remove entry %lu from %s\n"
msgstr "%s: hakemistoa %s ei voi uudelleennimetä hakemistoksi %s\n"
#, fuzzy, c-format
#| msgid "%s: invalid home directory '%s'\n"
msgid "%s: %s mail spool (%s) not found\n"
msgstr "%s: virheellinen kotihakemisto \"%s\"\n"
#, fuzzy, c-format
#| msgid "%s: warning: can't remove "
msgid "%s: warning: can't remove %s: %s\n"
msgstr "%s: varoitus: ei voi poistaa tiedostoa "
@@ -2241,17 +2120,14 @@ msgid "%s: Can't allocate memory, tcb entry for %s not removed.\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: failed to drop privileges (%s)\n"
msgid "%s: Cannot drop privileges: %s\n"
msgstr "%s: Oikeuksien pudottaminen epäonnistui (%s)\n"
#, fuzzy, c-format
#| msgid "%s: cannot rename directory %s to %s\n"
msgid "%s: Cannot remove the content of %s: %s\n"
msgstr "%s: hakemistoa %s ei voi uudelleennimetä hakemistoksi %s\n"
#, fuzzy, c-format
#| msgid "%s: cannot rename directory %s to %s\n"
msgid "%s: Cannot remove tcb files for %s: %s\n"
msgstr "%s: hakemistoa %s ei voi uudelleennimetä hakemistoksi %s\n"
@@ -2260,7 +2136,6 @@ msgid "%s: user %s is a NIS user\n"
msgstr "%s: käyttäjä %s on NIS-käyttäjä\n"
#, fuzzy, c-format
#| msgid "%s: invalid home directory '%s'\n"
msgid "%s: %s home directory (%s) not found\n"
msgstr "%s: virheellinen kotihakemisto \"%s\"\n"
@@ -2302,7 +2177,7 @@ msgstr ""
msgid ""
" -a, --append append the user to the supplemental GROUPS\n"
" mentioned by the -G option without removing\n"
" him/her from other groups\n"
" the user from other groups\n"
msgstr ""
msgid " -l, --login NEW_LOGIN new value of the login name\n"
@@ -2354,22 +2229,18 @@ msgid ""
msgstr ""
#, fuzzy, c-format
#| msgid "%s: user %s exists\n"
msgid "%s: user '%s' already exists in %s\n"
msgstr "%s: käyttäjä %s on olemassa\n"
#, fuzzy, c-format
#| msgid "%s: invalid date '%s'\n"
msgid "%s: invalid subordinate uid range '%s'\n"
msgstr "%s: virheellinen päiväys \"%s\"\n"
#, fuzzy, c-format
#| msgid "%s: invalid date '%s'\n"
msgid "%s: invalid subordinate gid range '%s'\n"
msgstr "%s: virheellinen päiväys \"%s\"\n"
#, fuzzy, c-format
#| msgid "%s: cannot open file %s\n"
msgid "%s: no options\n"
msgstr "%s: tiedostoa %s ei voi lukita\n"
@@ -2382,7 +2253,6 @@ msgid "%s: shadow passwords required for -e and -f\n"
msgstr "%s: varjosalasanat vaaditaan valitsimille -e ja -f\n"
#, fuzzy, c-format
#| msgid "Member already exists\n"
msgid "%s: UID '%lu' already exists\n"
msgstr "Jäsen on jo olemassa\n"
@@ -2401,7 +2271,6 @@ msgid ""
msgstr ""
#, fuzzy, c-format
#| msgid "%s: cannot create directory %s\n"
msgid "%s: Failed to change ownership of the home directory"
msgstr "%s: hakemistoa %s ei voi luoda\n"
@@ -2433,22 +2302,18 @@ msgid "failed to rename mailbox"
msgstr "postilaatikon uudelleennimeäminen epäonnistui"
#, fuzzy, c-format
#| msgid "%s: failed to drop privileges (%s)\n"
msgid "%s: failed to remove uid range %lu-%lu from '%s'\n"
msgstr "%s: Oikeuksien pudottaminen epäonnistui (%s)\n"
#, fuzzy, c-format
#| msgid "%s: failed to drop privileges (%s)\n"
msgid "%s: failed to add uid range %lu-%lu from '%s'\n"
msgstr "%s: Oikeuksien pudottaminen epäonnistui (%s)\n"
#, fuzzy, c-format
#| msgid "%s: failed to drop privileges (%s)\n"
msgid "%s: failed to remove gid range %lu-%lu from '%s'\n"
msgstr "%s: Oikeuksien pudottaminen epäonnistui (%s)\n"
#, fuzzy, c-format
#| msgid "%s: failed to drop privileges (%s)\n"
msgid "%s: failed to add gid range %lu-%lu from '%s'\n"
msgstr "%s: Oikeuksien pudottaminen epäonnistui (%s)\n"
@@ -2472,31 +2337,24 @@ msgid " -u, --user which user's tcb shadow file to edit\n"
msgstr ""
#, fuzzy, c-format
#| msgid "%s: failed to drop privileges (%s)\n"
msgid "%s: failed to remove %s\n"
msgstr "%s: Oikeuksien pudottaminen epäonnistui (%s)\n"
#, fuzzy, c-format
#| msgid ""
#| "\n"
#| "%s: %s is unchanged\n"
msgid "%s: %s is unchanged\n"
msgstr ""
"\n"
"%s: tiedostoa %s ei muutettu\n"
#, fuzzy
#| msgid "failed to rename mailbox"
msgid "failed to create scratch directory"
msgstr "postilaatikon uudelleennimeäminen epäonnistui"
#, fuzzy
#| msgid "%s: failed to drop privileges (%s)\n"
msgid "failed to drop privileges"
msgstr "%s: Oikeuksien pudottaminen epäonnistui (%s)\n"
#, fuzzy
#| msgid "Couldn't lock file"
msgid "Couldn't get file context"
msgstr "Tiedostoa ei voi lukita"
@@ -2504,7 +2362,6 @@ msgid "setfscreatecon () failed"
msgstr ""
#, fuzzy
#| msgid "%s: failed to drop privileges (%s)\n"
msgid "failed to gain privileges"
msgstr "%s: Oikeuksien pudottaminen epäonnistui (%s)\n"
@@ -2515,12 +2372,10 @@ msgid "Couldn't make backup"
msgstr "Tiedostoa ei voi varmuuskopioida"
#, fuzzy, c-format
#| msgid "%s: %s\n"
msgid "%s: %s: %s\n"
msgstr "%s: %s\n"
#, fuzzy, c-format
#| msgid "%s: %s not found in /etc/passwd\n"
msgid "%s: %s returned with status %d\n"
msgstr "%s: Käyttäjää %s ei löydy tiedostosta /etc/passwd\n"
@@ -2529,27 +2384,22 @@ msgid "%s: %s killed by signal %d\n"
msgstr ""
#, fuzzy
#| msgid "Unable to open group file\n"
msgid "failed to open scratch file"
msgstr "Ryhmätiedostoa ei voi avata\n"
#, fuzzy
#| msgid "%s: fields too long\n"
msgid "failed to unlink scratch file"
msgstr "%s: kentät liian pitkiä\n"
#, fuzzy
#| msgid "failed to rename mailbox"
msgid "failed to stat edited file"
msgstr "postilaatikon uudelleennimeäminen epäonnistui"
#, fuzzy
#| msgid "failed to change mailbox owner"
msgid "failed to allocate memory"
msgstr "postilaatikon omistajan vaihtaminen epäonnistui"
#, fuzzy
#| msgid "failed to rename mailbox"
msgid "failed to create backup file"
msgstr "postilaatikon uudelleennimeäminen epäonnistui"
@@ -2559,7 +2409,6 @@ msgstr ""
"%s: tiedostoa %s ei voi palauttaa: %s (muutoksesi ovat tiedostossa %s)\n"
#, fuzzy, c-format
#| msgid "%s: invalid base directory '%s'\n"
msgid "%s: failed to find tcb directory for %s\n"
msgstr "%s: virheellinen perushakemisto \"%s\"\n"
@@ -2890,7 +2739,7 @@ msgstr "%s: virheellinen perushakemisto \"%s\"\n"
#~ "GROUPS\n"
#~ " mentioned by the -G option without "
#~ "removing\n"
#~ " him/her from other groups\n"
#~ " the user from other groups\n"
#~ " -h, --help display this help message and exit\n"
#~ " -l, --login NEW_LOGIN new value of the login name\n"
#~ " -L, --lock lock the user account\n"

11351
po/fr.po

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More