Compare commits

...

284 Commits
4.5 ... 4.8.1

Author SHA1 Message Date
Serge Hallyn
2cc7da6058 configure.ac: release 4.8.1
This is mainly to revert the --sbindir/--bindir commit which broke some
distros

Signed-off-by: Serge Hallyn <shallyn@cisco.com>
2020-01-23 14:56:43 -06:00
Serge Hallyn
142d788c81 update changelog
Signed-off-by: Serge Hallyn <shallyn@cisco.com>
2020-01-23 14:37:42 -06:00
Serge Hallyn
33c6a170a5 Merge pull request #212 from t8m/in-subuid-mapping
Do not mistake a regular user process for a namespaced one
2020-01-23 09:15:04 -06:00
Tomas Mraz
fd4405b763 Do not mistake a regular user process for a namespaced one
In case there is a regular user with a process running on a system
with uid falling into a namespaced uid range of another user.
The user with the colliding namespaced uid range will not be
allowed to be deleted without forcing the action with -f.

The user_busy() is adjusted to check whether the suspected process
is really a namespaced process in a different namespace.
2020-01-21 09:16:10 +01:00
Serge Hallyn
dfceca8427 Merge pull request #210 from t8m/shell-check
Make the check for non-executable shell only a warning.
2020-01-20 07:04:51 -08:00
Serge Hallyn
54c1660969 Merge pull request #211 from Frans-Spiesschaert/master
updated po file for Dutch
2020-01-20 06:57:13 -08:00
Frans-Spiesschaert
eebcacfae8 po/nl.po
updated Dutch translation for shadow version 4.8 (pot file from 2019-12-01).
I updated the translation for Debian
and on request of the Debian package maintainer Bálint Réczey I am creating this pull request
2020-01-17 13:19:09 -08:00
Tomas Mraz
4ed08824e5 Make the check for non-executable shell only a warning.
Although it is a good idea to check for an inadvertent typo
in the shell name it is possible that the shell might not be present
on the system yet when the user is added.
2020-01-16 12:59:29 +01:00
Serge Hallyn
3e942adb21 Merge pull request #209 from Duncaen/home-mode
add new HOME_MODE login.defs(5) option
2020-01-12 09:39:13 -06:00
Duncan Overbruck
085d04c3dd add new HOME_MODE login.defs(5) option
This option can be used to set a separate mode for useradd(8) and
newusers(8) to create the home directories with.
If this option is not set, the current behavior of using UMASK
or the default umask is preserved.

There are many distributions that set UMASK to 077 by default just
to create home directories not readable by others and use things like
/etc/profile, bashrc or sudo configuration files to set a less
restrictive
umask. This has always resulted in bug reports because it is hard
to follow as users tend to change files like bashrc and are not about
setting the umask to counteract the umask set in /etc/login.defs.

A recent change in sudo has also resulted in many bug reports about
this. sudo now tries to respect the umask set by pam modules and on
systems where pam does not set a umask, the login.defs UMASK value is
used.
2020-01-12 16:18:32 +01:00
Serge Hallyn
ed4a0157c4 silence more compiler warnings
And don't reuse the cp variable for two different purposes.

Signed-off-by: Serge Hallyn <shallyn@cisco.com>
2020-01-12 08:20:50 -06:00
Serge Hallyn
93f1f35123 Revert "add new HOME_MODE login.defs(5) option"
Missing file

This reverts commit a847899b52.
2020-01-12 07:56:19 -06:00
Serge Hallyn
9f7f3b013e silence compiler warnings
Signed-off-by: Serge Hallyn <shallyn@cisco.com>
2020-01-12 07:31:26 -06:00
Serge Hallyn
5a6ddf3b57 man: add missing author entries
Signed-off-by: Serge Hallyn <shallyn@cisco.com>
2020-01-12 07:24:04 -06:00
Serge Hallyn
0512c187c8 Merge pull request #204 from edneville/198_user_add_tty_logging
Adding tty logging to the useradd command
2020-01-12 07:19:18 -06:00
ed
f32d4a359b Adding tty logging to the useradd command
This commit adds a from= field to the end of the useradd log entry.
Casting user_name to tallylog_reset to silence a compiler warning.

Changelog: Fixing tabs
Changelog: Changing function prototype to const char* to match user_name declaration.
2020-01-12 07:08:05 -06:00
Serge Hallyn
401d0743af Merge pull request #208 from Duncaen/umask-home
add new UMASK_HOME login.defs option
2020-01-11 16:20:13 -06:00
Duncan Overbruck
a847899b52 add new HOME_MODE login.defs(5) option
This option can be used to set a separate mode for useradd(8) and
newusers(8) to create the home directories with.
If this option is not set, the current behavior of using UMASK
or the default umask is preserved.

There are many distributions that set UMASK to 077 by default just
to create home directories not readable by others and use things like
/etc/profile, bashrc or sudo configuration files to set a less
restrictive
umask. This has always resulted in bug reports because it is hard
to follow as users tend to change files like bashrc and are not about
setting the umask to counteract the umask set in /etc/login.defs.

A recent change in sudo has also resulted in many bug reports about
this. sudo now tries to respect the umask set by pam modules and on
systems where pam does not set a umask, the login.defs UMASK value is
used.
2020-01-11 22:27:39 +01:00
Serge Hallyn
88c1a6d98d Update README to point to new alioth list urls
Closes #195.

Signed-off-by: Serge Hallyn <shallyn@cisco.com>
2020-01-11 14:50:55 -06:00
Serge Hallyn
ef095ceef1 Merge pull request #206 from edneville/123_log_ssh_original_command_in_nologin
Adding logging of SSH_ORIGINAL_COMMAND to nologin.
2020-01-11 14:47:57 -06:00
ed
4c9ec2f5a4 Adding logging of SSH_ORIGINAL_COMMAND to nologin.
If SSH_ORIGINAL_COMMAND is set, it will be added to the syslog entry.

Closes #123.

Changelog: (SEH squashed commit): Fixing indentation
Changelog: (SEH) break up long line
2020-01-11 14:46:52 -06:00
Serge Hallyn
d7add53f06 add changelog entry about account-tools-setuid
Signed-off-by: Serge Hallyn <shallyn@cisco.com>
2019-12-20 00:14:13 -06:00
Serge Hallyn
2aa7427e2b Merge pull request #205 from Blub/2019-12-19/bail-on-error-in-for-loops
Makefile: bail out on error in for-loops
2019-12-20 00:08:32 -06:00
Serge Hallyn
1ec36eabb2 Merge pull request #199 from falconindy/master
Don't auto-enable ACCT_TOOLS_SETUID if PAM is detected
2019-12-20 00:07:23 -06:00
Serge Hallyn
bd3c39f1c8 Merge pull request #201 from michaelweiser/groupmems-man
man: Don't suggest making groupmems user-writeable
2019-12-19 14:49:45 -06:00
Wolfgang Bumiller
258944e331 Makefile: bail out on error in for-loops
`make` runs each line in a shell and bails out on error,
however, the shell is not started with `-e`, so commands in
`for` loops can fail without the error actually causing
`make` to bail out with a failure status.

For instance, the following make snippet will end
successfully, printing 'SUCCESS', despite the first `chmod`
failing:

    all:
        touch a b
        for i in a-missing-file a b; do \
            chmod 666 $$i; \
        done
        @echo SUCCESS

To prevent wrong paths in install scripts from remaining
unnoticed, let's activate `set -e` in the `for` loop
subshells.

Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
2019-12-19 18:54:30 +01:00
Christian Brauner
51d65f37e5 Merge pull request #203 from Rushi98/master
Deduplicate usermod manual (fixes #202)
2019-12-18 11:46:20 +01:00
Rushikesh Jogdand
0f332f48bc Deduplicate usermod manual (fixes #202)
Changelog:
1) modified:   man/usermod.8.xml
   Removed duplicate "badnames" options entry.
2019-12-18 11:20:40 +05:30
Michael Weiser
a73d4aee75 man: Don't suggest making groupmems user-writeable
Suggesting mode 2770 is dangerous because it makes the binary writeable
by all members of the owning group which is supposed to be normal
end-users. Suggest 2710 instead as is usual for s[ug]id binaries,
allowing execution but neither reading nor writing.

Signed-off-by: Michael Weiser <michael.weiser@gmx.de>
2019-12-17 21:27:46 +01:00
Christian Brauner
7f53048875 Merge pull request #200 from jubalh/sel1
selinux: include stdio
2019-12-17 13:43:56 +01:00
Michael Vetter
b1a5cda91e selinux: include stdio
We use fprintf(), stderr etc, so we should include stdio.h.
2019-12-17 13:40:47 +01:00
Dave Reisner
66b7bc0dcf Don't auto-enable ACCT_TOOLS_SETUID if PAM is detected
Here's a sad story:

* 70971457 is merged into shadow, allowing newgidmap/newuidmap to be
installed with file caps rather than setuid.
* https://bugs.archlinux.org/task/63248 is filed to take advantage of
this.
* The arch maintainer of the 'shadow' package notices that this doesn't
work, and submits a pull request to fix this in shadow.
* edf7547ad5 is merged, fixing the post install hooks.

The problem here is that distros have been building shadow with PAM for
O(years), but the install hooks have silently failed due to the
combination of the directory mismatch (suidubins vs suidsbins) and later
success with setuid'ing newgidmap/newuidmap.

With the install hooks fixed, those of us (Arch[1] and Gentoo[2] so far)
who never built shadow explicitly with --enable-account-tools-setuid are
now getting setuid account tools, and don't have PAM configuration
suitable for use with setuid account management tools.

It's entirely unclear to me why you'd want this, but I assume there's
some reason out there for it existing. Regardless, setuid binaries are
dangerous and shouldn't be enabled by default without good reason.

[1] https://bugs.archlinux.org/task/64836
[2] https://bugs.gentoo.org/702252
2019-12-16 14:22:32 -05:00
Serge Hallyn
eaaac67d4f Merge pull request #197 from chutz/revert-bindir-sbindir-change
Revert "Honor --sbindir and --bindir for binary installation"
2019-12-01 20:28:21 -06:00
Patrick McLean
3cc3948d71 Revert "Honor --sbindir and --bindir for binary installation"
This reverts commit e293aa9cfc.

See https://github.com/shadow-maint/shadow/issues/196

Some distros still care about `/bin` vs `/usr/bin`. This commit makes
it so all binaries are always installed to `/bin`/`/sbin`. The only way to
restore the previous behaviour of installing some binaries to
`/usr/bin`/`/usr/sbin` is to revert the patch.
2019-12-01 13:59:52 -08:00
Serge Hallyn
08096ed24a Merge pull request #194 from jubalh/contr
Add myself to contributors
2019-12-01 11:46:13 -06:00
Michael Vetter
92a678c250 Add myself to contributors 2019-12-01 18:37:38 +01:00
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
fariouche
b6b2c756c9 add --prefix option 2017-03-01 22:51:09 +01:00
730 changed files with 21979 additions and 23487 deletions

107
ChangeLog
View File

@@ -1,8 +1,105 @@
2016-05-17 Serge Hallyn <serge@hallyn.com>
2020-01-23 Serge Hallyn <serge@hallyn.com>
* selinux: inclue stdio (Michael Vetter)
* man: don't suggest making groupmems user-writeable (Michael Weiser)
* Makefile: bail out on error in for loops (Wolfgang Bumiller)
* Adding logging of SSH_ORIGINAL_COMMAND to nologin. (ed@s5h.net)
* add new HOME_MODE login.defs option (Duncan Overbruck)
* Add tty logging to useradd (ed@s5h.net)
* Useradd: make non-executable shell check only a warning (Tomas Mraz)
* Update Dutch translation (Frans-Spiesschaert)
* user_busy: Do not mistake a regular user process for a namespaced one (Tomas Mraz)
* Revert "Honor --sbindir and --bindir for binary installation" Patrick McLean)
2019-12-20 Dave Reisner <dreisner@archlinux.org>
* Do not auto-enable acct_tools_setuid just because
pam is enabled. NOTE - any distros which are relying
on this behavior will need to switch to configure
--enable-account-tools-setuid
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
2016-05-17 Serge Hallyn <serge@hallyn.com>
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.
@@ -10,18 +107,18 @@
* Merge Russian translation updates from Yuri Kozlov
* Fix missing close of subuid file on error
2016-02-23 Serge Hallyn <serge@hallyn.com>
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.
2016-02-08 Serge Hallyn <serge@hallyn.com>
2017-02-08 Serge Hallyn <serge@hallyn.com>
* Update Kazakh translations
* Consult configuration before calculating subuids
* Remove misplaced semicolon
2016-01-29 Serge Hallyn <serge@hallyn.com>
2017-01-29 Serge Hallyn <serge@hallyn.com>
* Patch from Fedora to improve performance with SSSD, Winbind,
or nss_ldap. (Tomas Mraz)

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>).

32
README
View File

@@ -2,30 +2,25 @@ 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
commit list: pkg-shadow-commits@lists.alioth.debian.org
for general discuss: pkg-shadow-devel@alioth-lists.debian.net
commit list: pkg-shadow-commits@alioth-lists.debian.net
Mailing lists subscription
http://lists.alioth.debian.org/mailman/listinfo/pkg-shadow-devel
http://lists.alioth.debian.org/mailman/listinfo/pkg-shadow-commits
http://alioth-lists.debian.net/mailman/listinfo/pkg-shadow-devel
http://alioth-lists.debian.net/mailman/listinfo/pkg-shadow-commits
Mailing lists archives:
http://lists.alioth.debian.org/pipermail/pkg-shadow-devel/
http://lists.alioth.debian.org/pipermail/pkg-shadow-commits/
http://alioth-lists.debian.net/pipermail/pkg-shadow-devel/
http://alioth-lists.debian.net/pipermail/pkg-shadow-commits/
S/Key support:
Shadow can be built with S/Key support using the S/Key package from:
@@ -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>
@@ -92,6 +90,7 @@ Martin Bene <mb@sime.com>
Martin Mares <mj@gts.cz>
Michael Meskes <meskes@topsystem.de>
Michael Talbot-Wilson <mike@calypso.bns.com.au>
Michael Vetter <jubalh@iodoru.org>
Mike Frysinger <vapier@gentoo.org>
Mike Pakovic <mpakovic@users.southeast.net>
Nicolas François <nicolas.francois@centraliens.net>
@@ -119,4 +118,5 @@ Maintainers
Tomasz Kłoczko <kloczek@pld.org.pl> (2000-2007)
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,6 @@
dnl Process this file with autoconf to produce a configure script.
AC_PREREQ([2.64])
AC_INIT([shadow], [4.5], [pkg-shadow-devel@lists.alioth.debian.org], [],
AC_INIT([shadow], [4.8.1], [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])
@@ -34,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)
@@ -74,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,
@@ -116,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,
@@ -229,7 +226,7 @@ AC_ARG_ENABLE(account-tools-setuid,
*) AC_MSG_ERROR(bad value ${enableval} for --enable-account-tools-setuid)
;;
esac],
[enable_acct_tools_setuid="maybe"]
[enable_acct_tools_setuid="no"]
)
AC_ARG_ENABLE(utmpx,
@@ -250,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])
@@ -277,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
@@ -298,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).
@@ -312,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
@@ -324,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
@@ -452,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
@@ -476,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"
@@ -566,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)
@@ -596,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
@@ -671,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.
#
@@ -186,12 +195,17 @@ KILLCHAR 025
# Default initial "umask" value used by login(1) on non-PAM enabled systems.
# Default "umask" value for pam_umask(8) on PAM enabled systems.
# UMASK is also used by useradd(8) and newusers(8) to set the mode for new
# home directories.
# home directories if HOME_MODE is not set.
# 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
# HOME_MODE is used by useradd(8) and newusers(8) to set the mode for new
# home directories.
# If HOME_MODE is not set, the value of UMASK is used to create the mode.
#HOME_MODE 0700
#
# Password aging controls:
#
@@ -311,6 +325,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 +347,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,
@@ -363,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;
}
@@ -375,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.
@@ -452,7 +474,6 @@ int commonio_lock (struct commonio_db *db)
}
}
return 0; /* failure */
#endif /* !HAVE_LCKPWDF */
}
static void dec_lock_count (void)
@@ -465,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
@@ -905,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;
@@ -918,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

@@ -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.
@@ -90,8 +93,10 @@ static struct itemdef def_table[] = {
{"FAKE_SHELL", NULL},
{"GID_MAX", NULL},
{"GID_MIN", NULL},
{"HOME_MODE", NULL},
{"HUSHLOGIN_FILE", NULL},
{"KILLCHAR", NULL},
{"LASTLOG_UID_MAX", NULL},
{"LOGIN_RETRIES", NULL},
{"LOGIN_TIMEOUT", NULL},
{"LOG_OK_LOGINS", NULL},
@@ -106,6 +111,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},
@@ -151,11 +160,20 @@ static struct itemdef knowndef_table[] = {
{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 */
@@ -424,6 +442,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
*
@@ -432,9 +481,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.
@@ -442,6 +498,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.
*/
@@ -505,6 +597,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)

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);
@@ -254,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 */
@@ -274,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 *);
@@ -313,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 */
@@ -401,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

@@ -31,12 +31,13 @@
#ifdef WITH_SELINUX
#include <stdio.h>
#include "defines.h"
#include <selinux/selinux.h>
#include <selinux/context.h>
#include "prototypes.h"
static bool selinux_checked = false;
static bool selinux_enabled;
@@ -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

@@ -238,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

@@ -114,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

@@ -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
AM_CPPFLAGS = -I$(top_srcdir)/lib
AM_CPPFLAGS = -I$(top_srcdir)/lib $(ECONF_CPPFLAGS)
noinst_LIBRARIES = libmisc.a
@@ -44,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 \
@@ -71,3 +72,8 @@ libmisc_a_SOURCES = \
xgetspnam.c \
xmalloc.c \
yesno.c
if WITH_BTRFS
libmisc_a_SOURCES += btrfs.c
endif

110
libmisc/btrfs.c Normal file
View File

@@ -0,0 +1,110 @@
#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)
{
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

@@ -136,7 +136,7 @@ static int check_gid (const gid_t gid,
}
/* Check if the GID exists according to NSS */
errno = 0;
if (getgrgid (gid) != NULL) {
if (prefix_getgrgid (gid) != NULL) {
return EEXIST;
} else {
/* getgrgid() was NULL
@@ -167,7 +167,7 @@ int find_new_gid (bool sys_group,
bool *used_gids;
const struct group *grp;
gid_t gid_min, gid_max, preferred_min;
gid_t group_id, id;
gid_t id;
gid_t lowest_found, highest_found;
int result;
int nospam = 0;

View File

@@ -136,7 +136,7 @@ static int check_uid(const uid_t uid,
}
/* Check if the UID exists according to NSS */
errno = 0;
if (getpwuid(uid) != NULL) {
if (prefix_getpwuid(uid) != NULL) {
return EEXIST;
} else {
/* getpwuid() was NULL
@@ -167,7 +167,7 @@ int find_new_uid(bool sys_user,
bool *used_uids;
const struct passwd *pwd;
uid_t uid_min, uid_max, preferred_min;
uid_t user_id, id;
uid_t id;
uid_t lowest_found, highest_found;
int result;
int nospam = 0;

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,

View File

@@ -52,7 +52,7 @@
unsigned long long epoch;
fallback = time (NULL);
source_date_epoch = getenv ("SOURCE_DATE_EPOCH");
source_date_epoch = shadow_getenv ("SOURCE_DATE_EPOCH");
if (!source_date_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)) != NULL) {
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)) != NULL) {
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)) != NULL) {
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)) != NULL) {
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)) != NULL) {
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

@@ -39,6 +39,7 @@
#include <sys/types.h>
#include <dirent.h>
#include <fcntl.h>
#include <unistd.h>
#include "defines.h"
#include "prototypes.h"
#ifdef ENABLE_SUBIDS
@@ -106,6 +107,31 @@ static int user_busy_utmp (const char *name)
#endif /* !__linux__ */
#ifdef __linux__
#ifdef ENABLE_SUBIDS
#define in_parentuid_range(uid) ((uid) >= parentuid && (uid) < parentuid + range)
static int different_namespace (const char *sname)
{
/* 41: /proc/xxxxxxxxxx/task/xxxxxxxxxx/ns/user + \0 */
char path[41];
char buf[512], buf2[512];
ssize_t llen1, llen2;
snprintf (path, 41, "/proc/%s/ns/user", sname);
if ((llen1 = readlink (path, buf, sizeof(buf))) == -1)
return 0;
if ((llen2 = readlink ("/proc/self/ns/user", buf2, sizeof(buf2))) == -1)
return 0;
if (llen1 == llen2 && memcmp (buf, buf2, llen1) == 0)
return 0; /* same namespace */
return 1;
}
#endif /* ENABLE_SUBIDS */
static int check_status (const char *name, const char *sname, uid_t uid)
{
/* 40: /proc/xxxxxxxxxx/task/xxxxxxxxxx/status + \0 */
@@ -114,7 +140,6 @@ static int check_status (const char *name, const char *sname, uid_t uid)
FILE *sfile;
snprintf (status, 40, "/proc/%s/status", sname);
status[39] = '\0';
sfile = fopen (status, "r");
if (NULL == sfile) {
@@ -123,26 +148,29 @@ static int check_status (const char *name, const char *sname, uid_t uid)
while (fgets (line, sizeof (line), sfile) == line) {
if (strncmp (line, "Uid:\t", 5) == 0) {
unsigned long ruid, euid, suid;
assert (uid == (unsigned long) uid);
(void) fclose (sfile);
if (sscanf (line,
"Uid:\t%lu\t%lu\t%lu\n",
&ruid, &euid, &suid) == 3) {
if ( (ruid == (unsigned long) uid)
|| (euid == (unsigned long) uid)
|| (suid == (unsigned long) uid)
#ifdef ENABLE_SUBIDS
|| have_sub_uids(name, ruid, 1)
|| have_sub_uids(name, euid, 1)
|| have_sub_uids(name, suid, 1)
#endif /* ENABLE_SUBIDS */
) {
(void) fclose (sfile);
|| (suid == (unsigned long) uid) ) {
return 1;
}
#ifdef ENABLE_SUBIDS
if ( different_namespace (sname)
&& ( have_sub_uids(name, ruid, 1)
|| have_sub_uids(name, euid, 1)
|| have_sub_uids(name, suid, 1))
) {
return 1;
}
#endif /* ENABLE_SUBIDS */
} else {
/* Ignore errors. This is just a best effort. */
}
(void) fclose (sfile);
return 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 \

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

@@ -46,7 +46,7 @@ Vypíše seznam členů skupiny.
Příkaz
\fBgroupmems\fR
by měl mít nastavena práva
2770
2710
a měl by jej vlastnit uživatel
\fIroot\fR
a skupina
@@ -58,7 +58,7 @@ spravovat členství ve skupinách.
.sp
.nf
$ groupadd \-r groups
$ chmod 2770 groupmems
$ chmod 2710 groupmems
$ chown root.groups groupmems
$ groupmems \-g groups \-a gk4

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
@@ -16,4 +27,4 @@ $(man_MANS):
@echo you need to run configure with --enable-man to generate man pages
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).
@@ -180,7 +180,7 @@
<title>SETUP</title>
<para>
The <command>groupmems</command> executable should be in mode
<literal>2770</literal> as user <emphasis>root</emphasis> and in group
<literal>2710</literal> as user <emphasis>root</emphasis> and in group
<emphasis>groups</emphasis>. The system administrator can add users to
group <emphasis>groups</emphasis> to allow or disallow them using the
<command>groupmems</command> utility to manage their own group
@@ -189,7 +189,7 @@
<programlisting>
$ groupadd -r groups
$ chmod 2770 groupmems
$ chmod 2710 groupmems
$ chown root.groups groupmems
$ groupmems -g groups -a gk4
</programlisting>

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

@@ -50,10 +50,12 @@
<!ENTITY FAKE_SHELL SYSTEM "login.defs.d/FAKE_SHELL.xml">
<!ENTITY FTMP_FILE SYSTEM "login.defs.d/FTMP_FILE.xml">
<!ENTITY GID_MAX SYSTEM "login.defs.d/GID_MAX.xml">
<!ENTITY HOME_MODE SYSTEM "login.defs.d/HOME_MODE.xml">
<!ENTITY HUSHLOGIN_FILE SYSTEM "login.defs.d/HUSHLOGIN_FILE.xml">
<!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">
@@ -184,10 +186,12 @@
&FAKE_SHELL;
&FTMP_FILE;
&GID_MAX; <!-- documents also GID_MIN -->
&HOME_MODE;
&HUSHLOGIN_FILE;
&ISSUE_FILE;
&KILLCHAR;
&LASTLOG_ENAB;
&LASTLOG_UID_MAX;
&LOG_OK_LOGINS;
&LOG_UNKFAIL_ENAB;
&LOGIN_RETRIES;
@@ -349,7 +353,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 +374,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
@@ -394,6 +403,7 @@
ENCRYPT_METHOD
GID_MAX GID_MIN
MAX_MEMBERS_PER_GROUP MD5_CRYPT_ENAB
HOME_MODE
PASS_MAX_DAYS PASS_MIN_DAYS PASS_WARN_AGE
<phrase condition="sha_crypt">SHA_CRYPT_MAX_ROUNDS
SHA_CRYPT_MIN_ROUNDS</phrase>
@@ -474,6 +484,8 @@
<para>
CREATE_HOME
GID_MAX GID_MIN
HOME_MODE
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 +510,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,43 @@
<!--
Copyright (c) 1991 - 1993, Julianne Frances Haugh
Copyright (c) 1991 - 1993, Chip Rosenthal
Copyright (c) 2007 - 2009, 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.
-->
<varlistentry>
<term><option>HOME_MODE</option> (number)</term>
<listitem>
<para>
The mode for new home directories. If not specified,
the <option>UMASK</option> is used to create the mode.
</para>
<para>
<command>useradd</command> and <command>newusers</command> use this
to set the mode of the home directory they create.
</para>
</listitem>
</varlistentry>

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

@@ -37,7 +37,8 @@
</para>
<para>
<command>useradd</command> and <command>newusers</command> use this
mask to set the mode of the home directory they create
mask to set the mode of the home directory they create if
<option>HOME_MODE</option> is not set.
</para>
<para condition="no_pam">
It is also used by <command>login</command> to define users' initial

View File

@@ -33,6 +33,13 @@
]>
<refentry id='newgidmap.1'>
<refentryinfo>
<author>
<firstname>Eric</firstname>
<surname>Biederman</surname>
<contrib>Creation, 2013</contrib>
</author>
</refentryinfo>
<refmeta>
<refentrytitle>newgidmap</refentrytitle>
<manvolnum>1</manvolnum>

View File

@@ -33,6 +33,13 @@
]>
<refentry id='newuidmap.1'>
<refentryinfo>
<author>
<firstname>Eric</firstname>
<surname>Biederman</surname>
<contrib>Creation, 2013</contrib>
</author>
</refentryinfo>
<refmeta>
<refentrytitle>newuidmap</refentrytitle>
<manvolnum>1</manvolnum>

View File

@@ -32,6 +32,7 @@
"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
<!ENTITY ENCRYPT_METHOD SYSTEM "login.defs.d/ENCRYPT_METHOD.xml">
<!ENTITY GID_MAX SYSTEM "login.defs.d/GID_MAX.xml">
<!ENTITY HOME_MODE SYSTEM "login.defs.d/HOME_MODE.xml">
<!ENTITY MAX_MEMBERS_PER_GROUP SYSTEM "login.defs.d/MAX_MEMBERS_PER_GROUP.xml">
<!ENTITY MD5_CRYPT_ENAB SYSTEM "login.defs.d/MD5_CRYPT_ENAB.xml">
<!ENTITY PASS_MAX_DAYS SYSTEM "login.defs.d/PASS_MAX_DAYS.xml">
@@ -266,6 +267,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>
@@ -370,6 +383,7 @@
</variablelist>
<variablelist>
&GID_MAX; <!-- documents also GID_MIN -->
&HOME_MODE;
&MAX_MEMBERS_PER_GROUP;
</variablelist>
<variablelist condition="no_pam">

View File

@@ -72,6 +72,9 @@
<citerefentry><refentrytitle>nologin</refentrytitle><manvolnum>5</manvolnum>
</citerefentry>.
</para>
<para>
If <command>SSH_ORIGINAL_COMMAND</command> is populated it will be logged.
</para>
</refsect1>
<refsect1 id='see_also'>

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

@@ -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)."
@@ -6980,7 +6980,7 @@ msgstr ""
#: groupmems.8.xml:181(para)
msgid ""
"The <command>groupmems</command> executable should be in mode <literal>2770</"
"The <command>groupmems</command> executable should be in mode <literal>2710</"
"literal> as user <emphasis>root</emphasis> and in group <emphasis>groups</"
"emphasis>. The system administrator can add users to group <emphasis>groups</"
"emphasis> to allow or disallow them using the <command>groupmems</command> "
@@ -6992,7 +6992,7 @@ msgstr ""
msgid ""
"\n"
"\t$ groupadd -r groups\n"
"\t$ chmod 2770 groupmems\n"
"\t$ chmod 2710 groupmems\n"
"\t$ chown root.groups groupmems\n"
"\t$ groupmems -g groups -a gk4\n"
" "
@@ -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

@@ -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, "
@@ -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)."
@@ -8878,14 +8878,14 @@ msgstr "EINRICHTUNG"
#: groupmems.8.xml:181(para)
msgid ""
"The <command>groupmems</command> executable should be in mode <literal>2770</"
"The <command>groupmems</command> executable should be in mode <literal>2710</"
"literal> as user <emphasis>root</emphasis> and in group <emphasis>groups</"
"emphasis>. The system administrator can add users to group <emphasis>groups</"
"emphasis> to allow or disallow them using the <command>groupmems</command> "
"utility to manage their own group membership list."
msgstr ""
"Die ausführbare Datei <command>groupmems</command> sollte die Rechte "
"<literal>2770</literal> haben und dem Benutzer <emphasis>root</emphasis> und "
"<literal>2710</literal> haben und dem Benutzer <emphasis>root</emphasis> und "
"der Gruppe <emphasis>groups</emphasis> gehören. Der Systemadministrator kann "
"Benutzer der Gruppe <emphasis>groups</emphasis> hinzufügen, um ihnen zu "
"ermöglichen, mit <command>groupmems</command> die Mitgliederliste ihrer "
@@ -8896,14 +8896,14 @@ msgstr ""
msgid ""
"\n"
"\t$ groupadd -r groups\n"
"\t$ chmod 2770 groupmems\n"
"\t$ chmod 2710 groupmems\n"
"\t$ chown root.groups groupmems\n"
"\t$ groupmems -g groups -a gk4\n"
" "
msgstr ""
"\n"
"\t$ groupadd -r groups\n"
"\t$ chmod 2770 groupmems\n"
"\t$ chmod 2710 groupmems\n"
"\t$ chown root.groups groupmems\n"
"\t$ groupmems -g groups -a gk4\n"
" "
@@ -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

@@ -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)."
@@ -9254,14 +9254,14 @@ msgstr "CONFIGURAZIONE"
#: groupmems.8.xml:181(para)
msgid ""
"The <command>groupmems</command> executable should be in mode <literal>2770</"
"The <command>groupmems</command> executable should be in mode <literal>2710</"
"literal> as user <emphasis>root</emphasis> and in group <emphasis>groups</"
"emphasis>. The system administrator can add users to group <emphasis>groups</"
"emphasis> to allow or disallow them using the <command>groupmems</command> "
"utility to manage their own group membership list."
msgstr ""
"L'eseguibile <command>groupmems</command> dovrebbe avere i permessi "
"<literal>2770</literal> ed essere di proprietà di <emphasis>root</emphasis> "
"<literal>2710</literal> ed essere di proprietà di <emphasis>root</emphasis> "
"e del gruppo <emphasis>groups</emphasis>. L'amministratore di sistema può "
"aggiungere utenti al gruppo <emphasis>groups</emphasis> per permettere loro "
"di poter gestire l'elenco di membri del proprio gruppo tramite il comando "
@@ -9272,14 +9272,14 @@ msgstr ""
msgid ""
"\n"
"\t$ groupadd -r groups\n"
"\t$ chmod 2770 groupmems\n"
"\t$ chmod 2710 groupmems\n"
"\t$ chown root.groups groupmems\n"
"\t$ groupmems -g groups -a gk4\n"
" "
msgstr ""
"\n"
" $ groupadd -r groups\n"
" $ chmod 2770 groupmems\n"
" $ chmod 2710 groupmems\n"
" $ chown root.groups groupmems\n"
" $ groupmems -g groups -a gk4\n"
" "
@@ -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

@@ -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)."
@@ -7558,7 +7558,7 @@ msgstr ""
#: groupmems.8.xml:181(para)
msgid ""
"The <command>groupmems</command> executable should be in mode <literal>2770</"
"The <command>groupmems</command> executable should be in mode <literal>2710</"
"literal> as user <emphasis>root</emphasis> and in group <emphasis>groups</"
"emphasis>. The system administrator can add users to group <emphasis>groups</"
"emphasis> to allow or disallow them using the <command>groupmems</command> "
@@ -7570,14 +7570,14 @@ msgstr ""
msgid ""
"\n"
"\t$ groupadd -r groups\n"
"\t$ chmod 2770 groupmems\n"
"\t$ chmod 2710 groupmems\n"
"\t$ chown root.groups groupmems\n"
"\t$ groupmems -g groups -a gk4\n"
" "
msgstr ""
"\n"
"\t$ groupadd -r groups\n"
"\t$ chmod 2770 groupmems\n"
"\t$ chmod 2710 groupmems\n"
"\t$ chown root.groups groupmems\n"
"\t$ groupmems -g groups -a gk4\n"
" "
@@ -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

@@ -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)."
@@ -9292,14 +9292,14 @@ msgstr "НАСТРОЙКА"
#: groupmems.8.xml:181(para)
msgid ""
"The <command>groupmems</command> executable should be in mode <literal>2770</"
"The <command>groupmems</command> executable should be in mode <literal>2710</"
"literal> as user <emphasis>root</emphasis> and in group <emphasis>groups</"
"emphasis>. The system administrator can add users to group <emphasis>groups</"
"emphasis> to allow or disallow them using the <command>groupmems</command> "
"utility to manage their own group membership list."
msgstr ""
"Исполняемый файл программы <command>groupmems</command> должен иметь права "
"<literal>2770</literal>, принадлежать пользователю <emphasis>root</emphasis> "
"<literal>2710</literal>, принадлежать пользователю <emphasis>root</emphasis> "
"и группе <emphasis>groups</emphasis>. Системный администратор может "
"добавлять пользователей в группу <emphasis>groups</emphasis>, разрешая или "
"запрещая им запускать программу <command>groupmems</command> для управления "
@@ -9311,14 +9311,14 @@ msgstr ""
msgid ""
"\n"
"\t$ groupadd -r groups\n"
"\t$ chmod 2770 groupmems\n"
"\t$ chmod 2710 groupmems\n"
"\t$ chown root.groups groupmems\n"
"\t$ groupmems -g groups -a gk4\n"
" "
msgstr ""
"\n"
"\t$ groupadd -r groups\n"
"\t$ chmod 2770 groupmems\n"
"\t$ chmod 2710 groupmems\n"
"\t$ chown root.groups groupmems\n"
"\t$ groupmems -g groups -a gk4\n"
" "
@@ -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

@@ -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)
@@ -4233,12 +4233,12 @@ msgid "SETUP"
msgstr ""
#: groupmems.8.xml:181(para)
msgid "The <command>groupmems</command> executable should be in mode <literal>2770</literal> as user <emphasis>root</emphasis> and in group <emphasis>groups</emphasis>. The system administrator can add users to group <emphasis>groups</emphasis> to allow or disallow them using the <command>groupmems</command> utility to manage their own group membership list."
msgid "The <command>groupmems</command> executable should be in mode <literal>2710</literal> as user <emphasis>root</emphasis> and in group <emphasis>groups</emphasis>. The system administrator can add users to group <emphasis>groups</emphasis> to allow or disallow them using the <command>groupmems</command> utility to manage their own group membership list."
msgstr ""
#: groupmems.8.xml:190(programlisting)
#, no-wrap
msgid "\n\t$ groupadd -r groups\n\t$ chmod 2770 groupmems\n\t$ chown root.groups groupmems\n\t$ groupmems -g groups -a gk4\n "
msgid "\n\t$ groupadd -r groups\n\t$ chmod 2710 groupmems\n\t$ chown root.groups groupmems\n\t$ groupmems -g groups -a gk4\n "
msgstr ""
#: groupmems.8.xml:222(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

@@ -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)."
@@ -7780,7 +7780,7 @@ msgstr ""
#: groupmems.8.xml:181(para)
msgid ""
"The <command>groupmems</command> executable should be in mode <literal>2770</"
"The <command>groupmems</command> executable should be in mode <literal>2710</"
"literal> as user <emphasis>root</emphasis> and in group <emphasis>groups</"
"emphasis>. The system administrator can add users to group <emphasis>groups</"
"emphasis> to allow or disallow them using the <command>groupmems</command> "
@@ -7792,14 +7792,14 @@ msgstr ""
msgid ""
"\n"
"\t$ groupadd -r groups\n"
"\t$ chmod 2770 groupmems\n"
"\t$ chmod 2710 groupmems\n"
"\t$ chown root.groups groupmems\n"
"\t$ groupmems -g groups -a gk4\n"
" "
msgstr ""
"\n"
"\t$ groupadd -r groups\n"
"\t$ chmod 2770 groupmems\n"
"\t$ chmod 2710 groupmems\n"
"\t$ chown root.groups groupmems\n"
"\t$ groupmems -g groups -a gk4\n"
" "
@@ -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

@@ -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)."
@@ -7960,7 +7960,7 @@ msgstr ""
#: groupmems.8.xml:181(para)
msgid ""
"The <command>groupmems</command> executable should be in mode <literal>2770</"
"The <command>groupmems</command> executable should be in mode <literal>2710</"
"literal> as user <emphasis>root</emphasis> and in group <emphasis>groups</"
"emphasis>. The system administrator can add users to group <emphasis>groups</"
"emphasis> to allow or disallow them using the <command>groupmems</command> "
@@ -7972,14 +7972,14 @@ msgstr ""
msgid ""
"\n"
"\t$ groupadd -r groups\n"
"\t$ chmod 2770 groupmems\n"
"\t$ chmod 2710 groupmems\n"
"\t$ chown root.groups groupmems\n"
"\t$ groupmems -g groups -a gk4\n"
" "
msgstr ""
"\n"
"\t$ groupadd -r groups\n"
"\t$ chmod 2770 groupmems\n"
"\t$ chmod 2710 groupmems\n"
"\t$ chown root.groups groupmems\n"
"\t$ groupmems -g groups -a gk4\n"
" "
@@ -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,13 @@
<!-- SHADOW-CONFIG-HERE -->
]>
<refentry id='subgid.5'>
<refentryinfo>
<author>
<firstname>Eric</firstname>
<surname>Biederman</surname>
<contrib>Creation, 2013</contrib>
</author>
</refentryinfo>
<refmeta>
<refentrytitle>subgid</refentrytitle>
<manvolnum>5</manvolnum>

View File

@@ -32,6 +32,13 @@
<!-- SHADOW-CONFIG-HERE -->
]>
<refentry id='subuid.5'>
<refentryinfo>
<author>
<firstname>Eric</firstname>
<surname>Biederman</surname>
<contrib>Creation, 2013</contrib>
</author>
</refentryinfo>
<refmeta>
<refentrytitle>subuid</refentrytitle>
<manvolnum>5</manvolnum>

View File

@@ -32,6 +32,8 @@
"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 HOME_MODE SYSTEM "login.defs.d/HOME_MODE.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 +127,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 +465,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 +682,8 @@
<variablelist>
&CREATE_HOME;
&GID_MAX; <!-- documents also GID_MIN -->
&HOME_MODE;
&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,16 @@
</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 +330,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>
@@ -500,6 +528,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"

301
po/cs.po
View File

@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: shadow 4.2\n"
"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
"POT-Creation-Date: 2014-08-22 17:05+0200\n"
"POT-Creation-Date: 2016-09-18 14:03-0500\n"
"PO-Revision-Date: 2014-08-24 15:07+0200\n"
"Last-Translator: Miroslav Kure <kurem@debian.cz>\n"
"Language-Team: Czech <debian-l10n-czech@lists.debian.org>\n"
@@ -330,30 +330,6 @@ msgstr "%s: Nelze získat jedinečné systémové GID (volná GID neexistují)\n
msgid "%s: Can't get unique GID (no more available GIDs)\n"
msgstr "%s: Nelze získat jedinečné GID (volná GID neexistují)\n"
#, c-format
msgid ""
"%s: Invalid configuration: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu), "
"SUB_GID_COUNT (%lu)\n"
msgstr ""
"%s: Neplatné nastavení: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu), "
"SUB_GID_COUNT (%lu)\n"
#, c-format
msgid "%s: Can't get unique subordinate GID range\n"
msgstr "%s: Nelze získat jedinečný rozsah podřízených GID\n"
#, c-format
msgid ""
"%s: Invalid configuration: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu), "
"SUB_UID_COUNT (%lu)\n"
msgstr ""
"%s: Neplatné nastavení: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu), "
"SUB_UID_COUNT (%lu)\n"
#, c-format
msgid "%s: Can't get unique subordinate UID range\n"
msgstr "%s: Nelze získat jedinečný rozsah podřízených UID\n"
#, c-format
msgid "%s: Invalid configuration: UID_MIN (%lu), UID_MAX (%lu)\n"
msgstr "%s: Neplatné nastavení: UID_MIN (%lu), UID_MAX (%lu)\n"
@@ -373,26 +349,6 @@ msgstr "%s: Nelze získat jedinečné systémové UID (volná UID neexistují)\n
msgid "%s: Can't get unique UID (no more available UIDs)\n"
msgstr "%s: Nelze získat jedinečné UID (volná UID neexistují)\n"
#, c-format
msgid "%s: Not enough arguments to form %u mappings\n"
msgstr "%s: Nedostatek argumentů pro vytvoření %u mapování\n"
#, c-format
msgid "%s: Memory allocation failure\n"
msgstr "%s: Chyba alokace paměti\n"
#, c-format
msgid "%s: snprintf failed!\n"
msgstr "%s: snprintf selhalo!\n"
#, c-format
msgid "%s: open of %s failed: %s\n"
msgstr "%s: otevření %s selhalo: %s\n"
#, c-format
msgid "%s: write to %s failed: %s\n"
msgstr "%s: zápis do %s selhal: %s\n"
msgid "Too many logins.\n"
msgstr "Příliš mnoho přihlášení.\n"
@@ -444,27 +400,6 @@ msgstr "passwd: heslo nebylo změněno\n"
msgid "passwd: password updated successfully\n"
msgstr "passwd: heslo bylo úspěšně změněno\n"
#, c-format
msgid "%s: PAM modules requesting echoing are not supported.\n"
msgstr ""
"%s: PAM moduly vyžadující zobrazování zpětné vazby nejsou podporovány.\n"
#, c-format
msgid "%s: conversation type %d not supported.\n"
msgstr "%s: typ konverzace %d není podporován.\n"
#, c-format
msgid "%s: (user %s) pam_start failure %d\n"
msgstr "%s: (uživatel %s) chyba pam_start %d\n"
#, c-format
msgid ""
"%s: (user %s) pam_chauthtok() failed, error:\n"
"%s\n"
msgstr ""
"%s: (uživatel %s) volání pam_chauthtok() selhalo, chyba:\n"
"%s\n"
#, c-format
msgid "Incorrect password for %s.\n"
msgstr "Chybné heslo pro %s.\n"
@@ -524,14 +459,6 @@ msgstr "Chybný kořenový adresář „%s“\n"
msgid "Can't change root directory to '%s'\n"
msgstr "Nelze změnit kořenový adresář na „%s“\n"
#, c-format
msgid "%s: user %s is currently logged in\n"
msgstr "%s: uživatel %s je právě přihlášen\n"
#, c-format
msgid "%s: user %s is currently used by process %d\n"
msgstr "%s: uživatel %s je momentálně používán procesem %d\n"
msgid "Unable to determine your tty name."
msgstr "Nelze zjistit vaše uživatelské jméno."
@@ -580,8 +507,9 @@ msgstr ""
" -m, --mindays MIN_DNŮ nastaví minimální počet dnů před změnou\n"
" hesla na MIN_DNŮ\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_DNŮ nastaví maximální počet dnů před změnou\n"
@@ -1158,6 +1086,13 @@ msgstr "%s: GID „%lu“ již existuje\n"
msgid "%s: Cannot setup cleanup service.\n"
msgstr "%s: nelze nastavit úklidovou službu.\n"
#, fuzzy
msgid ""
" -f, --force delete group even if it is the primary group "
"of a user\n"
msgstr ""
" -r, --reset vynuluje počitadla chybných přihlášení\n"
#, c-format
msgid "%s: cannot remove entry '%s' from %s\n"
msgstr "%s: nelze odstranit záznam „%s“ z %s\n"
@@ -1383,6 +1318,22 @@ msgid ""
msgstr ""
" -b, --before DNŮ zobrazí záznamy lastlogu starší než DNŮ\n"
#, fuzzy
msgid ""
" -C, --clear clear lastlog record of an user (usable only "
"with -u)\n"
msgstr ""
" -a, --all zobrazí záznamy faillogu o všech "
"uživatelích\n"
#, fuzzy
msgid ""
" -S, --set set lastlog record to current time (usable "
"only with -u)\n"
msgstr ""
" -a, --all zobrazí záznamy faillogu o všech "
"uživatelích\n"
msgid ""
" -t, --time DAYS print only lastlog records more recent than "
"DAYS\n"
@@ -1403,6 +1354,22 @@ msgstr "Uživatel Port Naposledy"
msgid "**Never logged in**"
msgstr "**Nikdy nebyl přihlášen**"
#, fuzzy, c-format
msgid "%s: Failed to update the entry for UID %lu\n"
msgstr "%s: nepodařilo se získat záznam pro UID %lu\n"
#, fuzzy, c-format
msgid "%s: Failed to update the lastlog file\n"
msgstr "%s: soubor s hesly nelze aktualizovat\n"
#, c-format
msgid "%s: Option -C cannot be used together with option -S\n"
msgstr ""
#, c-format
msgid "%s: Options -C and -S require option -u to specify the user\n"
msgstr ""
#, c-format
msgid "Usage: %s [-p] [name]\n"
msgstr "Použití: %s [-p] [jméno]\n"
@@ -1436,6 +1403,13 @@ msgstr ""
"\n"
"[Odpojení přeskočeno -- uživatel root smí být přihlášen.]"
#, c-format
msgid "%s: Cannot possibly work without effective root\n"
msgstr "%s: Bez efektivních oprávnění uživatele root nelze pracovat\n"
msgid "No utmp entry. You must exec \"login\" from the lowest level \"sh\""
msgstr "utmp záznam neexistuje. Musíte spustit „login“ z nejnižšího „sh“"
#, c-format
msgid ""
"\n"
@@ -1444,13 +1418,6 @@ msgstr ""
"\n"
"Vypršel časový limit pro přihlášení (%u sekund).\n"
#, c-format
msgid "%s: Cannot possibly work without effective root\n"
msgstr "%s: Bez efektivních oprávnění uživatele root nelze pracovat\n"
msgid "No utmp entry. You must exec \"login\" from the lowest level \"sh\""
msgstr "utmp záznam neexistuje. Musíte spustit „login“ z nejnižšího „sh“"
#, c-format
msgid "login: PAM Failure, aborting: %s\n"
msgstr "login: Chyba PAM, končím: %s\n"
@@ -1517,28 +1484,6 @@ msgstr ""
msgid "Usage: logoutd\n"
msgstr "Použití: logoutd\n"
#, c-format
msgid "%s: gid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
msgstr "%s: rozsah gid [%lu-%lu) -> [%lu-%lu) není povolen\n"
#, c-format
msgid ""
"usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> <count> ] ... \n"
msgstr ""
"použití: %s <pid> <gid> <spodnígid> <počet> [ <gid> <spodnígid> <počet> ] ...\n"
#, c-format
msgid "%s: Could not open proc directory for target %u\n"
msgstr "%s: Nelze otevřít proc adresář cílového procesu %u\n"
#, c-format
msgid "%s: Could not stat directory for target %u\n"
msgstr "%s: Nelze zavolat stat na adresář cílového procesu %u\n"
#, c-format
msgid "%s: Target %u is owned by a different user\n"
msgstr "%s: Cílový proces %u je vlastněn jiným uživatelem\n"
msgid "Usage: newgrp [-] [group]\n"
msgstr "Použití: newgrp [-] [skupina]\n"
@@ -1563,16 +1508,6 @@ msgstr "%s: GID „%lu“ neexistuje\n"
msgid "too many groups\n"
msgstr "příliš mnoho skupin\n"
#, c-format
msgid "%s: uid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
msgstr "%s: rozsah uid [%lu-%lu) -> [%lu-%lu) není povolen\n"
#, c-format
msgid ""
"usage: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> <count> ] ... \n"
msgstr ""
"použití: %s <pid> <uid> <spodníuid> <počet> [ <uid> <spodníuid> <počet> ] ...\n"
msgid " -r, --system create system accounts\n"
msgstr " -r, --system vytvoří systémový účet\n"
@@ -1898,12 +1833,6 @@ msgstr "Ověřování heslem vynecháno.\n"
msgid "Please enter your OWN password as authentication.\n"
msgstr "Pro ověření zadejte VAŠE vlastní heslo.\n"
msgid " ...killed.\n"
msgstr " ...zabit.\n"
msgid " ...waiting for child to terminate.\n"
msgstr " ...čeká na ukončení potomka.\n"
#, c-format
msgid "%s: Cannot fork user shell\n"
msgstr "%s: Nelze rozdvojit uživatelský shell\n"
@@ -1919,6 +1848,12 @@ msgstr "%s: chyba maskování signálu\n"
msgid "Session terminated, terminating shell..."
msgstr "Sezení skončeno, ukončuji shell..."
msgid " ...killed.\n"
msgstr " ...zabit.\n"
msgid " ...waiting for child to terminate.\n"
msgstr " ...čeká na ukončení potomka.\n"
msgid " ...terminated.\n"
msgstr " ...ukončen.\n"
@@ -2392,7 +2327,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 přidá uživatele do dalších SKUPIN zadaných\n"
" volbou -G; neruší členství v ostatních sk.\n"
@@ -2486,22 +2421,6 @@ msgstr "%s: UID „%lu“ již existuje\n"
msgid "%s: %s does not exist, you cannot use the flags %s or %s\n"
msgstr "%s: %s neexistuje, nemůžete použít přepínač %s ani %s\n"
#, c-format
msgid "%s: failed to remove uid range %lu-%lu from '%s'\n"
msgstr "%s: odebrání rozsahu uid %lu-%lu z „%s“ selhalo\n"
#, c-format
msgid "%s: failed to add uid range %lu-%lu from '%s'\n"
msgstr "%s: přidání rozsahu uid %lu-%lu z „%s“ selhalo\n"
#, c-format
msgid "%s: failed to remove gid range %lu-%lu from '%s'\n"
msgstr "%s: odebrání rozsahu gid %lu-%lu z „%s“ selhalo\n"
#, c-format
msgid "%s: failed to add gid range %lu-%lu from '%s'\n"
msgstr "%s: přidání rozsahu gid %lu-%lu z „%s“ selhalo\n"
#, c-format
msgid "%s: directory %s exists\n"
msgstr "%s: adresář %s již existuje\n"
@@ -2548,6 +2467,22 @@ msgstr "chyba při změně vlastníka poštovní schránky"
msgid "failed to rename mailbox"
msgstr "chyba při přejmenovávání poštovní schránky"
#, c-format
msgid "%s: failed to remove uid range %lu-%lu from '%s'\n"
msgstr "%s: odebrání rozsahu uid %lu-%lu z „%s“ selhalo\n"
#, c-format
msgid "%s: failed to add uid range %lu-%lu from '%s'\n"
msgstr "%s: přidání rozsahu uid %lu-%lu z „%s“ selhalo\n"
#, c-format
msgid "%s: failed to remove gid range %lu-%lu from '%s'\n"
msgstr "%s: odebrání rozsahu gid %lu-%lu z „%s“ selhalo\n"
#, c-format
msgid "%s: failed to add gid range %lu-%lu from '%s'\n"
msgstr "%s: přidání rozsahu gid %lu-%lu z „%s“ selhalo\n"
#, c-format
msgid ""
"You have modified %s.\n"
@@ -2634,6 +2569,93 @@ msgstr "%s: %s nelze obnovit: %s (změny jsou v %s)\n"
msgid "%s: failed to find tcb directory for %s\n"
msgstr "%s: nepodařilo se nalézt tcb adresář uživatele %s\n"
#~ msgid ""
#~ "%s: Invalid configuration: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu), "
#~ "SUB_GID_COUNT (%lu)\n"
#~ msgstr ""
#~ "%s: Neplatné nastavení: SUB_GID_MIN (%lu), SUB_GID_MAX (%lu), "
#~ "SUB_GID_COUNT (%lu)\n"
#~ msgid "%s: Can't get unique subordinate GID range\n"
#~ msgstr "%s: Nelze získat jedinečný rozsah podřízených GID\n"
#~ msgid ""
#~ "%s: Invalid configuration: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu), "
#~ "SUB_UID_COUNT (%lu)\n"
#~ msgstr ""
#~ "%s: Neplatné nastavení: SUB_UID_MIN (%lu), SUB_UID_MAX (%lu), "
#~ "SUB_UID_COUNT (%lu)\n"
#~ msgid "%s: Can't get unique subordinate UID range\n"
#~ msgstr "%s: Nelze získat jedinečný rozsah podřízených UID\n"
#~ msgid "%s: Not enough arguments to form %u mappings\n"
#~ msgstr "%s: Nedostatek argumentů pro vytvoření %u mapování\n"
#~ msgid "%s: Memory allocation failure\n"
#~ msgstr "%s: Chyba alokace paměti\n"
#~ msgid "%s: snprintf failed!\n"
#~ msgstr "%s: snprintf selhalo!\n"
#~ msgid "%s: open of %s failed: %s\n"
#~ msgstr "%s: otevření %s selhalo: %s\n"
#~ msgid "%s: write to %s failed: %s\n"
#~ msgstr "%s: zápis do %s selhal: %s\n"
#~ msgid "%s: PAM modules requesting echoing are not supported.\n"
#~ msgstr ""
#~ "%s: PAM moduly vyžadující zobrazování zpětné vazby nejsou podporovány.\n"
#~ msgid "%s: conversation type %d not supported.\n"
#~ msgstr "%s: typ konverzace %d není podporován.\n"
#~ msgid "%s: (user %s) pam_start failure %d\n"
#~ msgstr "%s: (uživatel %s) chyba pam_start %d\n"
#~ msgid ""
#~ "%s: (user %s) pam_chauthtok() failed, error:\n"
#~ "%s\n"
#~ msgstr ""
#~ "%s: (uživatel %s) volání pam_chauthtok() selhalo, chyba:\n"
#~ "%s\n"
#~ msgid "%s: user %s is currently logged in\n"
#~ msgstr "%s: uživatel %s je právě přihlášen\n"
#~ msgid "%s: user %s is currently used by process %d\n"
#~ msgstr "%s: uživatel %s je momentálně používán procesem %d\n"
#~ msgid "%s: gid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
#~ msgstr "%s: rozsah gid [%lu-%lu) -> [%lu-%lu) není povolen\n"
#~ msgid ""
#~ "usage: %s <pid> <gid> <lowergid> <count> [ <gid> <lowergid> "
#~ "<count> ] ... \n"
#~ msgstr ""
#~ "použití: %s <pid> <gid> <spodnígid> <počet> [ <gid> <spodnígid> "
#~ "<počet> ] ...\n"
#~ msgid "%s: Could not open proc directory for target %u\n"
#~ msgstr "%s: Nelze otevřít proc adresář cílového procesu %u\n"
#~ msgid "%s: Could not stat directory for target %u\n"
#~ msgstr "%s: Nelze zavolat stat na adresář cílového procesu %u\n"
#~ msgid "%s: Target %u is owned by a different user\n"
#~ msgstr "%s: Cílový proces %u je vlastněn jiným uživatelem\n"
#~ msgid "%s: uid range [%lu-%lu) -> [%lu-%lu) not allowed\n"
#~ msgstr "%s: rozsah uid [%lu-%lu) -> [%lu-%lu) není povolen\n"
#~ msgid ""
#~ "usage: %s <pid> <uid> <loweruid> <count> [ <uid> <loweruid> "
#~ "<count> ] ... \n"
#~ msgstr ""
#~ "použití: %s <pid> <uid> <spodníuid> <počet> [ <uid> <spodníuid> "
#~ "<počet> ] ...\n"
#~ msgid " -c, --crypt-method the crypt method (one of %s)\n"
#~ msgstr " -c, --crypt-method typ šifry (jeden z %s)\n"
@@ -2897,7 +2919,7 @@ msgstr "%s: nepodařilo se nalézt tcb adresář uživatele %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"
@@ -3270,9 +3292,6 @@ msgstr "%s: nepodařilo se nalézt tcb adresář uživatele %s\n"
#~ msgid "%s: can't rewrite password file\n"
#~ msgstr "%s: soubor s hesly nelze přepsat\n"
#~ msgid "%s: can't update password file\n"
#~ msgstr "%s: soubor s hesly nelze aktualizovat\n"
#~ msgid "%s: can't update shadow password file\n"
#~ msgstr "%s: soubor se stínovými hesly nelze aktualizovat\n"

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"

174
po/de.po
View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: shadow 4.2-2\n"
"Report-Msgid-Bugs-To: pkg-shadow-devel@lists.alioth.debian.org\n"
"POT-Creation-Date: 2012-05-20 19:52+0200\n"
"POT-Creation-Date: 2016-09-18 14:03-0500\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"
@@ -428,6 +428,10 @@ msgstr "%s: Ungültiger chroot-Pfad »%s«\n"
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 chdir to chroot directory %s: %s\n"
msgstr "%s: auf chroot-Verzeichnis %s kann nicht zugegriffen werden: %s\n"
#, c-format
msgid "%s: unable to chroot to directory %s: %s\n"
msgstr "%s: chroot-Wechsel in Verzeichnis %s nicht möglich: %s\n"
@@ -509,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"
@@ -796,6 +801,10 @@ msgstr "%s: Zeile %d: Zeile zu lang\n"
msgid "%s: line %d: missing new password\n"
msgstr "%s: Zeile %d: Neues Passwort fehlt\n"
#, fuzzy, c-format
msgid "%s: failed to crypt password with salt '%s': %s\n"
msgstr "%s: Schreiben von %s fehlgeschlagen: %s\n"
#, c-format
msgid "%s: line %d: group '%s' does not exist\n"
msgstr "%s: Zeile %d: Gruppe »%s« existiert nicht\n"
@@ -1109,6 +1118,14 @@ msgstr "%s: GID »%lu« existiert bereits.\n"
msgid "%s: Cannot setup cleanup service.\n"
msgstr "%s: Ihr Benutzername konnte nicht bestimmt werden.\n"
#, fuzzy
msgid ""
" -f, --force delete group even if it is the primary group "
"of a user\n"
msgstr ""
" -r, --reset Zähler fehlgeschlagener Anmeldungen\n"
" zurücksetzen\n"
#, c-format
msgid "%s: cannot remove entry '%s' from %s\n"
msgstr "%s: Eintrag »%s« konnte nicht aus %s entfernt werden.\n"
@@ -1345,6 +1362,22 @@ msgstr ""
"älter\n"
" als TAGE sind\n"
#, fuzzy
msgid ""
" -C, --clear clear lastlog record of an user (usable only "
"with -u)\n"
msgstr ""
" -a, --all Aufzeichnungen fehlgeschlagener Anmeldungen\n"
" für alle Benutzer anzeigen\n"
#, fuzzy
msgid ""
" -S, --set set lastlog record to current time (usable "
"only with -u)\n"
msgstr ""
" -a, --all Aufzeichnungen fehlgeschlagener Anmeldungen\n"
" für alle Benutzer anzeigen\n"
msgid ""
" -t, --time DAYS print only lastlog records more recent than "
"DAYS\n"
@@ -1367,6 +1400,22 @@ msgstr "Benutzername Port Letzter"
msgid "**Never logged in**"
msgstr "**Noch nie angemeldet**"
#, fuzzy, c-format
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 update the lastlog file\n"
msgstr "%s: Zurücksetzen des lastlog-Eintrags für UID %lu fehlgeschlagen: %s\n"
#, c-format
msgid "%s: Option -C cannot be used together with option -S\n"
msgstr ""
#, c-format
msgid "%s: Options -C and -S require option -u to specify the user\n"
msgstr ""
#, c-format
msgid "Usage: %s [-p] [name]\n"
msgstr "Aufruf: %s [-p] [Name]\n"
@@ -1400,6 +1449,14 @@ msgstr ""
"\n"
"[Trennung abgebrochen -- root-Login erlaubt.]"
#, c-format
msgid "%s: Cannot possibly work without effective root\n"
msgstr "%s: Arbeit ohne effektive root-Rechte eventuell nicht möglich\n"
msgid "No utmp entry. You must exec \"login\" from the lowest level \"sh\""
msgstr ""
"Kein utmp-Eintrag. Sie müssen »login« vom niedrigsten »sh«-Level ausführen."
#, c-format
msgid ""
"\n"
@@ -1409,14 +1466,6 @@ msgstr ""
"Login nach %u Sekunden wegen\n"
"Zeitüberschreitung abgebrochen.\n"
#, c-format
msgid "%s: Cannot possibly work without effective root\n"
msgstr "%s: Arbeit ohne effektive root-Rechte eventuell nicht möglich\n"
msgid "No utmp entry. You must exec \"login\" from the lowest level \"sh\""
msgstr ""
"Kein utmp-Eintrag. Sie müssen »login« vom niedrigsten »sh«-Level ausführen."
#, c-format
msgid "login: PAM Failure, aborting: %s\n"
msgstr "login: PAM-Fehler, Abbruch: %s\n"
@@ -1489,6 +1538,10 @@ msgstr "Aufruf: newgrp [-] [Gruppe]\n"
msgid "Usage: sg group [[-c] command]\n"
msgstr "Aufruf: sg Gruppe [[-c] Befehl]\n"
#, fuzzy, c-format
msgid "%s: failed to crypt password with previous salt: %s\n"
msgstr "%s: Schreiben von %s fehlgeschlagen: %s\n"
msgid "Invalid password.\n"
msgstr "Ungültiges Passwort.\n"
@@ -1557,6 +1610,18 @@ msgstr "%s: Zeile %d: chown %s (Eigentümer ändern) fehlgeschlagen: %s\n"
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 new %s entry\n"
msgstr "%s: Vorbereiten des neuen %s-Eintrags »%s« fehlgeschlagen.\n"
#, fuzzy, c-format
msgid "%s: can't find subordinate user range\n"
msgstr "%s: Benutzer kann nicht erstellt werden\n"
#, fuzzy, c-format
msgid "%s: can't find subordinate group range\n"
msgstr "%s: Gruppe kann nicht erzeugt werden\n"
msgid ""
" -a, --all report password status on all accounts\n"
msgstr ""
@@ -1827,12 +1892,6 @@ msgstr "Passwort-Authentifizierung umgangen.\n"
msgid "Please enter your OWN password as authentication.\n"
msgstr "Bitte geben Sie Ihr EIGENES Passwort als Authentifizierung ein.\n"
msgid " ...killed.\n"
msgstr " ... abgeschossen.\n"
msgid " ...waiting for child to terminate.\n"
msgstr " ... Warten auf Beendigung des Kindprozesses.\n"
#, c-format
msgid "%s: Cannot fork user shell\n"
msgstr "%s: Prozessaufspaltung (fork) für Benutzer-Shell nicht möglich\n"
@@ -1848,13 +1907,19 @@ msgstr "%s: Signalmaskierungs-Fehlfunktion\n"
msgid "Session terminated, terminating shell..."
msgstr "Sitzung abgebrochen, Shell wird beendet ..."
#, c-format
msgid "%s: %s\n"
msgstr "%s: %s\n"
msgid " ...killed.\n"
msgstr " ... abgeschossen.\n"
msgid " ...waiting for child to terminate.\n"
msgstr " ... Warten auf Beendigung des Kindprozesses.\n"
msgid " ...terminated.\n"
msgstr " ... abgebrochen.\n"
#, c-format
msgid "%s: %s\n"
msgstr "%s: %s\n"
msgid ""
"Usage: su [options] [LOGIN]\n"
"\n"
@@ -2149,6 +2214,10 @@ msgstr "%s: Zurücksetzen des faillog-Eintrags für UID %lu fehlgeschlagen: %s\n
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\n"
msgstr "%s: Vorbereiten des neuen %s-Eintrags »%s« fehlgeschlagen.\n"
#, c-format
msgid "%s: cannot create directory %s\n"
msgstr "%s: Verzeichnis %s kann nicht erstellt werden.\n"
@@ -2192,6 +2261,14 @@ msgstr "%s: Erstellen des tcb-Verzeichnisses für %s fehlgeschlagen\n"
msgid "%s: can't create group\n"
msgstr "%s: Gruppe kann nicht erzeugt werden\n"
#, fuzzy, c-format
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 subordinate group IDs\n"
msgstr "%s: Gruppe kann nicht erzeugt werden\n"
#, c-format
msgid ""
"%s: warning: the home directory already exists.\n"
@@ -2243,6 +2320,10 @@ msgstr ""
"%s: Gruppe %s ist die primäre Gruppe eines anderen Benutzers und wird\n"
"nicht entfernt.\n"
#, fuzzy, c-format
msgid "%s: cannot remove entry %lu from %s\n"
msgstr "%s: Eintrag »%s« konnte nicht aus %s entfernt werden.\n"
#, c-format
msgid "%s: %s mail spool (%s) not found\n"
msgstr "%s: %s Mail-Warteschlange (%s) nicht gefunden\n"
@@ -2327,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"
@@ -2368,6 +2449,18 @@ msgstr " -u, --uid UID Neue UID des Benutzerzugangs\n"
msgid " -U, --unlock unlock the user account\n"
msgstr " -U, --unlock Den Benutzerzugang entsperren\n"
msgid " -v, --add-subuids FIRST-LAST add range of subordinate uids\n"
msgstr ""
msgid " -V, --del-subuids FIRST-LAST remove range of subordinate uids\n"
msgstr ""
msgid " -w, --add-subgids FIRST-LAST add range of subordinate gids\n"
msgstr ""
msgid " -W, --del-subgids FIRST-LAST remove range of subordinate gids\n"
msgstr ""
msgid ""
" -Z, --selinux-user SEUSER new SELinux user mapping for the user "
"account\n"
@@ -2389,6 +2482,14 @@ msgstr ""
msgid "%s: user '%s' already exists in %s\n"
msgstr "%s: Benutzer »%s« existiert bereits in %s.\n"
#, fuzzy, c-format
msgid "%s: invalid subordinate uid range '%s'\n"
msgstr "%s: Ungültiges Datum »%s«\n"
#, fuzzy, c-format
msgid "%s: invalid subordinate gid range '%s'\n"
msgstr "%s: Ungültiges Datum »%s«\n"
#, c-format
msgid "%s: no options\n"
msgstr "%s: keine Optionen\n"
@@ -2405,6 +2506,10 @@ msgstr "%s: shadow-Passwörter für -e und -f erforderlich\n"
msgid "%s: UID '%lu' already exists\n"
msgstr "%s: UID »%lu« existiert bereits\n"
#, fuzzy, c-format
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"
#, c-format
msgid "%s: directory %s exists\n"
msgstr "%s: Verzeichnis %s existiert\n"
@@ -2452,6 +2557,22 @@ msgstr "Fehler beim Ändern des mailbox-Besitzers"
msgid "failed to rename mailbox"
msgstr "Fehler beim Umbenennen von mailbox"
#, fuzzy, c-format
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 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 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 add gid range %lu-%lu from '%s'\n"
msgstr "%s: Vorbereiten des neuen %s-Eintrags »%s« fehlgeschlagen.\n"
#, c-format
msgid ""
"You have modified %s.\n"
@@ -2506,6 +2627,18 @@ msgstr "Datei konnte nicht gesperrt werden"
msgid "Couldn't make backup"
msgstr "Sicherung konnte nicht erstellt werden"
#, fuzzy, c-format
msgid "%s: %s: %s\n"
msgstr "%s: PAM: %s\n"
#, fuzzy, c-format
msgid "%s: %s returned with status %d\n"
msgstr "%s: nscd wurde mit Status %d beendet\n"
#, c-format
msgid "%s: %s killed by signal %d\n"
msgstr ""
msgid "failed to open scratch file"
msgstr "Öffnen der scratch-Datei fehlgeschlagen"
@@ -2530,4 +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"

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"

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